簡體   English   中英

將ArrayList從SecondActivity傳遞到Android MainActivity

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM