![](/img/trans.png)
[英]How do I pass string from SecondActivity to MainActivity on Android Studio?
[英]Passing ArrayList from SecondActivity to MainActivity Android
我的问题很简单,我正在尝试将数组列表从第二个活动传递给mainActivity。
但是,当用户从secondActivity按下时,在我的主活动中调用我的onRestart()时,数组列表似乎为空。
在主要活动中
@Override public void onRestart() {
super.onRestart();
DefaultLocations = (ArrayList<String>) getIntent().getSerializableExtra("updated");
///default locations is null
}
第二活动
@Override public void onPause() {
super.onPause();
Intent intent = new Intent(ManageLocations.this, MainActivity.class);
intent.putExtra("updated",locationsavailable)///size is 2 currently;
this.setIntent(intent);
}
我环顾四周,因为我知道有很多例子,但是没有一个例子可以帮助我将arraylist BACK传递给mainActivity。
感谢所有帮助!
在第二个活动中:
ArrayList < String > locationsavailable = new ArrayList < String > ();
locationsavailable.add("location1");
locationsavailable.add("location2");
Intent sentIntent = new Intent(SecondActivity.this, FirstActivity.class);
sentIntent.putExtra("string-array", locationsavailable);
startActivity(sentIntent);
在第一个活动中:
Intent intent = getIntent();
String [] DefaultLocations = intent.getStringArrayExtra("string-array");
编辑:
对于您的情况,建议您使用startActivityForResult
启动第二个活动,并在第一个活动中覆盖onActivityResult
。
针对您的情况的最佳解决方案是使用startActivityForResult
方法启动Second Activity。 这是您应该做什么的示例:
主要活动
public class MainActivity extends AppCompatActivity {
private static final int GET_LOCATIONS_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout = findViewById(R.id.mylayout);
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, GET_LOCATIONS_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == GET_LOCATIONS_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
ArrayList<String> locations = data.getStringArrayListExtra("result");
for(String location : locations) {
System.out.println(String.format("Location from SecondActivity %1$s", location));
}
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
}
第二活动
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<String> locationsavailable = new ArrayList<>();
locationsavailable.add("location1");
locationsavailable.add("location1");
Intent returnIntent = new Intent();
returnIntent.putExtra("result", locationsavailable);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
}
如果您不想将其作为活动的结果来启动,则应在MainActivity中覆盖@OnStart方法。
您只需要编写一些行的简单代码即可解决您的问题。
步骤1:将意图从主要活动发送到第二个活动时,请使用startActivityForResult()。
//Main Activity
private static final int GET_LOCATION_LIST=1; //you can give any value to variable
Intent intent = new Intent(context,SecondActivity.class);
startActivityForResult(intent,GET_LOCATION_LIST);
第2步:现在,在“第二活动”中,您必须在“主要活动”中将位置列表发送回去。
//Second Activity
Intent intent = new Intent();
intent.putExtra("updated", locationsavailable);
setResult(Activity.RESULT_OK, intent);
SubmissionMailerClientContactList.this.finish();
步骤3:现在再次在主要活动中,您必须使用onActivityResult()接收该意图
//Main Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
DefaultLocations=(ArrayList<String>)getIntent().getSerializableExtra("updated");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.