могу ли я дождаться двух разных результатов с StartActivityForResult () - PullRequest
0 голосов
/ 23 октября 2018

Здравствуйте, я хочу спросить, можно ли ждать 2 разных результатов с StartActivityForResult().Я пытаюсь выполнить следующее:

У меня есть ListView, и когда я щелкаю элемент, я запускаю другое действие.Там у меня есть 2 кнопки.Один из них - сохранить изменения имени элемента списка, а другой - удалить выбранный элемент.Я не уверен, как именно определить, какие кнопки я нажал.

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Решение:

Первый , начните свою деятельность с startActivityForResult(your_intent, 1);

Второй , в следующей активности(где у вас есть 2 кнопки):

В прослушивателе щелчка вашей кнопки сохранения передайте код результата как «1», как показано:

setResult(1);
finish();

В прослушивателе щелчка кнопки удаления, передайте код результата как «2 "как показано:

setResult(2);
finish();

Наконец , в onActivityResult() вашего предыдущего действия / фрагмента:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == 1) {
        ....
        (Save Button Pressed)
        ....
    }
    else if (requestCode == 1 && resultCode == 2) {
        ....
        (Delete Button Pressed)
        ....
    }
}

Вот и все.Рабочий пример из моего собственного проекта.

0 голосов
/ 23 октября 2018

Чтобы было понятнее, я назову первый activity (тот, что в списке) - ListActivity, а новый activity (тот, что с кнопками) - ButtonActivity.

Чтобы обнаружить кнопку, которая была нажата в ButtonActivity, добавьте в класс орудие следующим образом:

public class ButtonActivity extends AppCompatActivity implements View.OnClickListener

Затем реализуйте метод onClick(View v), например:

@Override
public void onClick(View v) {
    int id = v.getId();
    switch (id) {
        case R.id.your_save_button_id: {
            Intent data = new Intent();
            data.putExtra("item_to_save", item);
            setResult(CommonStatusCodes.SUCCESS, data);
            finish();
            break;
        }

        case R.id.your_delete_button_id: {
            Intent data = new Intent();
            data.putExtra("item_to_delete", item);
            setResult(CommonStatusCodes.SUCCESS, data);
            finish();
            break;
        }
        default: {
            break;
        }
    }

}

В вашем ListActivity:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == "request_code_for_button_activity") {
        if (resultCode == CommonStatusCodes.SUCCESS) {
            if (data != null) {
                if (data.getStringExtra("item_to_delete") != null) {
                    //DELETE YOUR ITEM HERE
                } else if (data.getStringExtra("item_to_save") != null) {
                    //SAVE YOUR ITEM HERE
                }
            }
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}
0 голосов
/ 23 октября 2018

Да.Второй параметр REQUEST_ID должен использоваться для указания формы запроса, которую вы запрашиваете.

При нажатии кнопки 1 вы вызываете

startActivityForResult(intent, REQUEST_1)

при нажатии кнопки 2 вы вызываете

startActivityForResult(intent, REQUEST_2)

и в обратном вызове он указывается в качестве первого параметра:

onActivityResult(requestCode: Int...)

, если requestCode == REQUEST_1, это от кнопки 1.

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