Отправка данных в Listview другого действия - PullRequest
0 голосов
/ 11 июля 2019

После нажатия кнопки я хотел бы перейти ко второму занятию, ввести данные во втором занятии, а затем вернуться к основному занятию, но с данными в ListView. Это мой код:

MainActivity:

public class MainActivity extends AppCompatActivity {

    Button button;
    ListView listView;
    String name;
    private static final int REQUEST_CODE = 1;


    ArrayAdapter<String> adapter;
    ArrayList<String> nameList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        button = findViewById(R.id.button2);
        listView = findViewById(R.id.CarList);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(i, REQUEST_CODE);
            }
        });



        nameList = new ArrayList<String>();
        nameList.addAll(Arrays.asList(name));

        adapter = new ArrayAdapter<String>(this, R.layout.element, nameList);

        listView.setAdapter(adapter);


    }

    protected void onActivityResult(int requestCode, int resultCode, Intent i){
        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {

            name = i.getStringExtra("name");

        }
    }

}

А это моя SecondActivity:

public class SecondActivity extends AppCompatActivity {

    EditText editText;
    Button button2;
    String name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        editText = findViewById(R.id.editText);
        button2 = findViewById(R.id.button);


    }

    public void finish() {

        Intent i = new Intent();
        name = editText.getText().toString();
        i.putExtra("name", name);
        setResult(RESULT_OK, i);
        super.finish();
    }
}

Что я могу изменить, чтобы приложение работало? Потому что теперь я получаю только сообщение: приложение остановлено, но я не получаю информацию о какой-либо ошибке.

1 Ответ

0 голосов
/ 11 июля 2019

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

Что я могу изменить, чтобы приложение работало? Потому что теперь я получаю только сообщение: приложение остановлено, но я не получаю информацию о какой-либо ошибке.

Это просто потому, что вы неправильно думаете, что Activity.finish() всегда вызывается всякий раз, когда вы закрываете действие. Но это никогда не будет называться Android. Взгляните на это изображение Lifecyle из Концепции жизненного цикла активности :

Activity-lifecycle concepts

вы можете видеть, что только onStop() тогда onDestroy() вызывается при закрытии активности.

Вам необходимо вызвать метод finish() вручную, чтобы отправить свое намерение. Или, что лучше, создайте метод, который только строит и устанавливает намерение для результата. Примерно так:

private void prepareResult(String name) {
    Intent i = new Intent();
    i.putExtra("name", name);
    setResult(RESULT_OK, i);
}

затем звоните, когда хотите закрыть свою деятельность:

String name = editText.getText().toString();
prepareResult(name);
finish();

Или вы можете переопределить onBackPressed(), чтобы также передать нажатие спины, как показано ниже:

@Override
public void onBackPressed() {
    Intent i = new Intent();
    name = editText.getText().toString();
    i.putExtra("name", name);
    setResult(RESULT_OK, i);

  // The default implementation simply finishes the current activity
  // see the documentation.
  super.onBackPressed();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...