Переключение между действиями в android?

В моем приложении для Android у меня есть следующее требование.

Активность A → Активность B (Перейти к опции A) → Активность C (вариант "Переход к опции", "Перейти к B" )

1) Чтобы перейти к активности A из Activity B, я использовал метод onBackPressed().

2) Чтобы перейти к действию B из Activity C, я снова использовал метод onBackPressed().

все работает нормально.

3) Теперь я хочу перейти в Activity A из Activity C (без вызова Intent).

Как я могу это сделать?

Отредактировано 1:

Активность A - это моя основная деятельность. Я не хочу перезапускать активность, используя Intent.i, чтобы возобновить действие A из действия c. (как, например, я сделал из операции B с помощью onBackPressed).

Отредактировано 2 (с ответом):

Хорошо, ребята. Спасибо всем за то, что вы оказали мне свою помощь по моему вопросу. Наконец, я нашел простой ответ, похожий на ответ @Paresh Mayani.

Ответ:

Intent a = new Intent(getApplicationContext(),ActivityA.class);
 a.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
 startActivity(a);

Я получил это приятное решение, используя эту ссылку, которая решила мою проблему. спасибо всем, и я действительно ценю это.

7 ответов

Я предполагаю, что вы не хотите использовать Intent, потому что всякий раз, когда вы используете Intent для перехода к активности, нажатие клавиши Back переместится к предыдущему действию (активность C). В этом случае я предлагаю вам включить флаг FLAG_ACTIVITY_CLEAR_TOP. Он уничтожит все предыдущие действия и позволит вам перейти к Activity A.

Intent a = new Intent(this,A.class);
 a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(a);

В качестве альтернативы вы можете попробовать флаг FLAG_ACTIVITY_REORDER_TO_FRONT вместо этого, который переместится в действие A, не снимая никаких действий.

Подробнее см. .


Есть два способа достичь этого: Запуская намерение с применением Intent Filter Очистить верхний стек, но в соответствии с вашим вопросом вы не заинтересованы в этом методе. Второй метод - запуск действий с помощью StartActivityForResult.

Используя флаги намерения:

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Второй способ, используя startActivityForResult:

В действии B:

Intent intent=new Intent(B.this, C.class);
 intent.startActivityForResult(intent);

метод onActivityResult:

protected void onActivityResult(int reqCode, int resultCode, Intent data) {
 if (resultCode == Activity.RESULT_OK ) {
 String res = data.getExtras().getString("result");
 if (res.equals("A")) {
 String msg = "RESULT: " + res;
 Toast.makeText(Login2.this, msg, Toast.LENGTH_SHORT).show();
 finish();
 }
 }
 }

В действии C

Intent intent = new Intent();
 intent.putString("result", "Hello, World");
 setResult(RESULT_OK, intent);


Надежное решение...

Начало работы с использованием StartActivityForResult()

И на основе условий, которые вы задали для ResultCodes в действиях.. Что-то вроде этого..

GO_TO_ACT_A = 1; GO_TO_ACT_B = 2;

И во всех активах onActivityResultMethod проверьте код результата.

if(resultCode==GO_TO_ACT_A){
 finish(); //Assuming curently you are in Activity C and wanna go to Activity A
}


Если вы хотите воссоздать свою деятельность, вы можете использовать FLAG_ACTIVITY_SINGLE_TOP

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

Выполняя это, ваша активность A не будет воссоздана, но вам придется переопределить onNewIntent(), который будет вызываться в вашей активности A.

UPDATE:

Это использовало Intent, но поскольку ваше требование не использовалось Intent, так что в этом случае лучший подход будет использовать startActivityForResult, поскольку уже есть несколько ответов выше. Я не разрабатываю его.


вы можете передать контекст Activity B в действие C, а затем в вызове Activity C

((Activity) bContext).finish();

который закроет Activity B, а затем вы можете позвонить

((Activity)getContext()).finish();

что заставит Activity C закрыться и вернуться к Activity A, поскольку активность B уже закрыта.


Почему вы не можете использовать,

@Override
protected void onSaveInstanceState(Bundle outState) {
 super.onSaveInstanceState(outState);
 //Save your current instance
}

"... Этот метод вызывается до того, как действие может быть убито, так что, когда он вернется через некоторое время в будущем, он сможет восстановить свое состояние. Например, если активность B запускается перед активностью A и на некоторая точечная активность A убита для восстановления ресурсов, активность A будет иметь возможность сохранить текущее состояние своего пользовательского интерфейса с помощью этого метода, так что, когда пользователь вернется к активности A, состояние пользовательского интерфейса может быть восстановлено через onCreate ( Bundle) или onRestoreInstanceState (Bundle)..."

Я думаю, это то, что вы хотели. С этим вы можете использовать Intent из Activity C. Да, тогда он переходит к методу onCreate, но там вы проверяете, есть ли какой-либо сохраненный экземпляр. Если есть какой-либо сохраненный экземпляр, вам не нужно загружать остальные элементы onCreate. Это ускорит ваше приложение.


Вы можете сделать это как:

Опция "Назад":

  • onBackPressed() { @Override public void onBackPressed() {

    // TODO Auto-generated method stub
     super.onBackPressed();
    //Your method intent
     Intent intent = new Intent(A.this, C.class);
     startActivity(intent);

    }

Использование кнопки:

  • button.setOnClickListener(новый View.OnClickListener()  {

    public void onClick(View v)
     {
     Intent intent = new Intent(A.this, C.class);
     startActivity(intent);
     // finish(); // may use finish if do not want endless loop
    }});

licensed under cc by-sa 3.0 with attribution.