android — Используя startActivityForResult, как получить requestCode в дочерней активности?" />

Используя startActivityForResult, как получить requestCode в дочерней активности?

У меня есть четыре вида деятельности, скажем, A, B, C и D. В моей ситуации A запустит действие B с помощью startActivityForResult.

startActivityForResult(new Intent(this,B.class),ONE);

В другой ситуации я буду B с другой ситуацией. как

 startActivityForResult(new Intent(this,B.class),TWO);

В B мне нужно вызвать C или D в зависимости от requestCode. Т.е. если ОДНО нужно запустить C, то еще D.
Поэтому мне нужно знать, как проверить код запроса в дочернем Activity (B здесь).
Другими словами, я хочу получить код запроса, с которого было начато действие B.

73 голоса | спросил Jithin 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 14:53:04 +0300000000pmThu, 24 Feb 2011 14:53:04 +030011 2011, 14:53:04

3 ответа


0

Вы можете передать код запроса, поставив доп.

intent.putExtra("requestCode", requestCode);   

Или, если вы использовали startActivityForResult много раз, то лучше, чем редактировать каждый, вы можете override startActivityForResult в вашем Activity, добавьте туда свой код вот так

@Override
    public void startActivityForResult(Intent intent, int requestCode) {
        intent.putExtra("requestCode", requestCode);
        super.startActivityForResult(intent, requestCode);
    }

Таким образом, нет необходимости редактировать все ваши startActivityForResult
Надеюсь, это помогло вам

ответил Labeeb Panampullan 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 15:12:33 +0300000000pmThu, 24 Feb 2011 15:12:33 +030011 2011, 15:12:33
0

Код запроса не передается в запущенное действие автоматически, потому что ему не нужно (и не должно) знать это значение. Нужно только знать, что делать, а не откуда это началось.

Начало действия - это просто еще одна форма вызова метода. Когда вы вызываете метод, вы получаете результат синхронно (прямо там, где вы сделали вызов). В этом случае вы только передаете информацию, которую метод должен выполнить для своей работы. Вы не говорите, откуда звонили.

Запуск действия - это асинхронный аналог вызова метода, и в этом случае вы получаете результат в специальном методе onActivityResult (). В этом методе вам нужно знать, что делать с только что полученным результатом, и у вас есть для этого код запроса.

Чтобы прояснить, почему не следует передавать код запроса в качестве параметра, рассмотрим пример действия, в котором показан продукт, который можно купить. В этом упражнении есть две кнопки с надписью «Купить» и «Войти» (поскольку вы в данный момент не вошли в систему). Нажатие «Логин» запустит действие с именем «Логин», которое попытается войти в систему, используя предоставленную информацию. Нажатие «Купить» сначала запустит ту же самую операцию «Вход», и, если вход был успешным, запустите операцию покупки.

Теперь кнопка «Вход в систему» ​​использует код запроса 1 для запуска действия входа в систему, но кнопка «Купить» не может использовать тот же код запроса, поскольку в случае успешного входа в систему ей придется делать что-то другое. Итак, кнопка «Купить» использует код запроса 2.

В упражнении «Вход в систему» ​​вы можете получить два разных кода запроса в зависимости от того, откуда он был вызван, но вам нужно будет выполнить ту же процедуру.

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

if (requestCode == LOGIN || requestCode == BUY) {
    // ...
} else ...

В результате вы также будете хранить константы кода запроса в центральном месте, например класс с именем RequestCodes.

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

ответил Szabolcs Berecz 4 +04002011-10-04T16:59:35+04:00312011bEurope/MoscowTue, 04 Oct 2011 16:59:35 +0400 2011, 16:59:35
0

В конечном итоге я использовал настраиваемое действие «Намерение» для передачи такого рода информации в запускающее действие.

protected static final String ACTION_DO_C = "do_c";
protected static final String ACTION_DO_D = "do_d";

Тогда ты пойдешь так:

final Intent intent = new Intent(this,B.class)
intent.setAction(ACTION_DO_C);
startActivityForResult(intent,ONE);

А в Activity B вы легко получаете действие:

getIntent().getAction();
ответил Marcel Bro 30 J0000006Europe/Moscow 2015, 14:05:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132