Передача ArrayList из SecondActivity в MainActivity для Android - PullRequest
0 голосов
/ 18 ноября 2018

моя проблема проста, я пытаюсь передать arraylist из моего второго действия в mainActivity.

Однако, когда мой onRestart () в моей основной деятельности вызывается, когда пользователь отжимается от secondActivity, массив данных кажется нулевым.

В ОСНОВНОЙ ДЕЯТЕЛЬНОСТИ

@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);
}

Я посмотрел вокруг, поскольку знаю, что есть много примеров, но ни один из них не помог мне передать массива BACK моей основной деятельности.

Вся помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Лучшим решением для вашей ситуации было бы начать Второе занятие с использованием метода startActivityForResult.Вот пример того, что вы должны сделать:

MainActivity

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

SecondActivity

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();
    }
}

Если выне хотите запускать его как Activity для результата, вы должны переопределить ваш метод @OnStart в MainActivity.

0 голосов
/ 20 ноября 2018

вам просто нужно написать простой код из нескольких строк, чтобы решить вашу проблему.

шаг 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");
        }
0 голосов
/ 18 ноября 2018

Во втором упражнении:

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 в первом действии.

...