Переключение между активностями в Android? - PullRequest
3 голосов
/ 30 марта 2012

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

Действие A -> Действие B (Перейти к варианту A) -> Действие C (Перейти к варианту, Перейти к варианту B)

1) Для перехода к мероприятию A из упражнения B я использовал метод onBackPressed().

2) Для перехода к действию B из операции C я использовал onBackPressed()метод снова.

те, которые работают нормально.

3) Теперь я хочу перейти к Деятельности A из Деятельности 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 ]

5 голосов
/ 30 марта 2012

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

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

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

Для более подробной информации, проверьте это .

4 голосов
/ 30 марта 2012

Это можно сделать двумя способами: запустив Intent с применением Intent Filter Clear top stack, но в зависимости от вашего вопроса этот метод вас не интересует.Второй метод - запуск операций с помощью 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);
3 голосов
/ 30 марта 2012

Надежным решением является ..

Вы запускаете операции, используя 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
}
1 голос
/ 30 марта 2012

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

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

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

UPDATE:

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

0 голосов
/ 19 сентября 2013

Вы можете сделать это следующим образом:

При заднем нажатии нажмите:

  1. 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);
    

    }

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

  1. 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
    }});
    
0 голосов
/ 30 марта 2012

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

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

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

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

0 голосов
/ 30 марта 2012

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

((Activity) bContext).finish();

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

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

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

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