2017-01-18 9 views
1

Я пишу приложение, которое имеет навигации вроде:переключение между различными видами деятельности и удалить предыдущий (только один) намереваюсь история стека

старт приложения -> A (домашняя страница) -> B -> C -> D

(оба активности B, C, D имеет такую ​​же панель навигации, и это может позволить пользователям переключения страниц между B, C, D.)

Однако Существует проблема, когда я нажимаю назад в деятельности B, C, D.


есть пример:

enter image description here

если я нажимаю назад в B, а затем обратно к дому.

, если я нажимаю назад в C, а затем обратно к B.

если я нажимаю назад в D, а затем обратно в С.

, но это не то, что я хочу.


Я хочу, чтобы поток, как показано ниже (нет пользователей независимо от того, не просматривает B/C/D, когда они нажимают назад, а затем обратно домой)

т.е.

A (домашняя страница) -> B -> (нажмите назад) -> A

A (домашняя страница) -> B -> C -> (нажмите назад) -> A

A (домашняя страница) -> B - > C -> D -> (нажмите обратно) -> A

A (домашняя страница) -> B -> C -> D -> B -> D -> (нажмите назад) -> A (домашняя страница)

A -> B -> C -> B -> D -> (нажмите обратно) -> A

Другими словами, я хочу, чтобы B, C, D были на одном уровне в иерархии навигации.


Вот мои коды переключения деятельности между B, C, D.

Оба B, C, D имеют эту часть кодов.

Коды ржали в активность B:

private void switchActivity(){ 
    NavigationView mNavigationView = (NavigationView) findViewById(R.id.navigationView); 
    mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 
      Intent intent = new Intent(); 

      if(menuItem.getTitle().toString().equals("B")) { 
       intent = getIntent(); 
       finish(); 
      } 
      if(menuItem.getTitle().toString().equals("C")) { 
       intent.setClass(getApplicationContext(), CActivity.class); 
      } 
      if(menuItem.getTitle().toString().equals("D")) { 
       intent.setClass(getApplicationContext(), DActivity.class); 
      } 

      startActivity(intent); 
      return true; 
     } 
    }); 
} 

ответ

0

попробовать это может эта помощь

private void switchActivity(){ 
    NavigationView mNavigationView = (NavigationView) findViewById(R.id.navigationView); 
    mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 
      if(menuItem.getTitle().toString().equals("B")) { 
       startActivity(new Intent(getApplicationContext(),BActivity.class)); 
       finish();} 

      if(menuItem.getTitle().toString().equals("C")) { 
       startActivity(new Intent(getApplicationContext(), CActivity.class)); 
       finish();} 

      if(menuItem.getTitle().toString().equals("D")) { 
       startActivity(new Intent(getApplicationContext(), DActivity.class)); 
       finish();} 
      return true; 
     } 
    }); 
    } 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    startActivity(new Intent(getApplicationContext(),AActivity.class)) 
    finish(); 
} 
+0

Это то, что я хочу, но я должен очистить предыдущие флаги, когда возвращаюсь на домашнюю страницу методом onBackPressed(). Итак, я добавил следующее: intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); , и он отлично работает, как и ожидалось. Большое вам спасибо –

+0

@Dileep Patel nice edit lolz –

0

Быстрый и быстрое решение было бы использовать noHistory=true на вашем B, C, D деятельности в вашем Manifest.xml. При этом все они вернутся к мероприятию A onBackPress().

Посмотреть документы https://developer.android.com/guide/topics/manifest/activity-element.html#nohist

+0

Я попытался это. , но это будет другая проблема, которая есть: Есть ListView в B, C, D. Когда пользователи нажимают на элемент списка и нажимают обратно, он возвращается домой, а не обратно на страницу ListView (B, C, D). извините за плохой в объяснении вопрос. –

0

Override ниже метод в каждом из ваших действий

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 
+0

Он работает, спасибо! –