将ArrayList从SecondActivity传递到Android MainActivity

时间:2018-11-17 22:40:34

标签: java android arrays android-intent android-activity

我的问题很简单,我正在尝试将数组列表从第二个活动传递给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。

感谢所有帮助!

3 个答案:

答案 0 :(得分:0)

第二个活动:

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

答案 1 :(得分:0)

针对您情况的最佳解决方案是使用y_train方法启动“第二个活动”。这是您应该做什么的示例:

MainActivity

startActivityForResult

SecondActivity

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
        }
    }
}
}

如果您不想将其作为活动的结果来启动,则应在MainActivity中覆盖@OnStart方法。

答案 2 :(得分:0)

您只需编写一些行的简单代码即可解决您的问题。

步骤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");
        }