onActivityResult не будет работать после onBackPressed - PullRequest
0 голосов
/ 17 апреля 2020

Я создал приложение с 2 экранами: Действие A (основное) и Действие B.

Когда пользователь нажимает кнопку поиска в действии A, он открывает ListView с именем Действие B.

В этом ListView у пользователя есть флажки, по которым он щелкает, и после нажатия кнопки Готово результаты возвращаются в действие А с помощью onActivityResult.

По какой-то причине, если, скажем, я делаю следующее:

1) нажал кнопку поиска в упражнении A. 2) выбрал 1 элемент в занятии B, но не нажал готово. Вместо этого я нажал кнопку возврата. 3) снова войдите в действие B 4) выберите элементы + клик готово

Затем мое приложение вылетает, потому что оно говорит, что результат нулевой.

Похоже, после того, как я нажимаю на кнопка возврата, что результат onActivity не работает между действием A и B.

Мой код:

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1) {
            if(resultCode == ChatActivity.RESULT_OK){

                new CountDownTimer(1000, 500) {
                    @Override
                    public void onTick(long millisUntilFinished) {
                    }
                    @Override
                    public void onFinish() {
                        confirmedBooks = (ArrayList<DiscoverBooks>)data.getSerializableExtra("confirmedItems");
                        DateInMillis = data.getLongExtra( "dateInMillis", System.currentTimeMillis());
                    }

                }.start();

            }
            if (resultCode == ChatActivity.RESULT_CANCELED) {

            }
        }
    }

и:

Btn_Done.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent confirmedData = new Intent();
        confirmedData.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        confirmedData.putExtra( "confirmedItems", (Serializable) itemsSelected );
        confirmedData.putExtra( "dateInMillis",DateInMillis );
        setResult(ChatActivity.RESULT_OK,confirmedData);

        finish();
    }
} );

ПРИМЕЧАНИЕ:

Я добавил строку confirmedData.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);, потому что я надеялся, что он очистит данные из предыдущего выбора, однако, похоже, он также будет работать не очень хорошо.

Если я выполняю эти действия, не нажимая на Кнопка возврата все работает правильно.

Есть ли причины для этого?

Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2020

Убедитесь, что вы позвонили мероприятие B с startActivityforResult из занятие A

И вам не нужно устанавливать флажок на результат установки. Вам нужно обновить его как:

Btn_Done.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent confirmedData = new Intent();
        confirmedData.putExtra( "confirmedItems", (Serializable) itemsSelected );
        confirmedData.putExtra( "dateInMillis",DateInMillis );
        setResult(ChatActivity.RESULT_OK,confirmedData);    
        finish();
    }
} );
...