2014-12-01 6 views
0

В моем приложении я пользуюсь кнопкой меню назад, чтобы вернуться к предыдущему действию. один из моих действий получает намерение от его предыдущей деятельности, и после того, как он делает http-вызов, он отправляет намерение в следующую деятельность, поэтому поток является видом A1-намерения -> A2-намерения -> A3. проблема в том, что когда я вернусь к активности A2 с A3, он сработает. Я думаю, причина была бы пустым намерением. поэтому я добавил ниже код в деятельности A3 и A2сбой мобильного приложения, когда я использую кнопку меню назад

активность A3

public boolean onOptionsItemSelected(MenuItem menuItem) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    switch (menuItem.getItemId()) { 
    case android.R.id.home: 
     Intent homeIntent = new Intent(context, AllClasses.class); 
     homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     homeIntent.putExtras(b); // bundle b has the required data for A2 
     startActivity(homeIntent); 
    } 
    return super.onOptionsItemSelected(menuItem); 
} 

активность A2

 protected void onReStart(){ 

    // retreiving data from intent 
      Bundle b = new Bundle(); 
      b = getIntent().getExtras(); 
      String imessage_string = b.getString("imessage"); 
      Log.d("onrestart",imessage_string); 
} 

Проблема: - Сейчас проблема в том, что теперь, если я нажимаю кнопку назад на панели меню A3 сначала я вижу сообщение «неудачно проект остановился», а затем после нажатия «ОК» A2 начинается, как я переехал из A1 в A2 и делает вызов asyncTask. если я комментирую "homeIntent.putExtras (b);" в A3, тогда я получаю сообщение об ошибке дважды и перехожу непосредственно в A1. я уверен, что при возврате в A2 мой метод onRestart() не вызывается, так как я не вызывал никакого вызова asyncTask в этом. Кто-нибудь понимает, что я должен делать здесь? Спасибо вам за помощь заранее .... :)

+1

вы хотите использовать onResume(), который вы должны переопределить, а не onReStart(). Кроме того, если панель действий обрабатывает домашнюю активность, вы также не должны явно запускать ее в onOptionsItemsSelected() – Martin

+0

okay ... мой девиз - перейти на предыдущий экран, и если я не буду использовать onOptionsltemsSelected(), то как сделать я передаю идентификатор обратно в A2, который требуется для вызова метода asyncTask? –

+0

в соответствии с жизненным циклом деятельности, представленным здесь. Http://developer.android.com/training/basics/activity-lifecycle/pausing.html Я должен использовать onReStart(), когда я вызываю другое действие, которое моя предыдущая деятельность прекращена (скрыта) ... вы не согласны? –

ответ

0

Если вы хотите что-то передать от А3 до А2 (стенд для деятельности) рассмотреть возможность использования onActivityResult А2

Посмотрите на answer, надеюсь, что это помогает

+0

спасибо @imran ... Я не использовал A3 для вычисления smthing для A2. дело было просто, как перейти на следующую страницу и вернуться назад. Однако проблема решена. я должен был объявить действие A2 как «launchmode = singleTop», чтобы моя система сохраняла свой экземпляр в обратном порядке, а затем из A3 мне пришлось вызывать navutils.navigateupfromsametask (this) », чтобы принести экземпляр A2 сверху с backstack. . Мне не нужно было переходить на A2 с A3. –

Смежные вопросы