2016-07-13 3 views
1

Я сделал навигацию по MainActivity (AppCompatActivity). У меня есть несколько элементов на этом навигационном экране, каждый из которых является фрагментом.Навигация Вид - обновленный элемент отмечен кнопкой «Назад»

Когда я использую кнопку «Назад», я хочу перейти к предыдущему фрагменту вместо того, чтобы поместить свое приложение на фон. Таким образом, чтобы изменить между фрагментами я использую:

 FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.layout, fragment).addToBackStack(null).commit(); 

При нажатии кнопки она идет к предыдущему фрагмента назад, но деталь проверяется на NavigationView остается. Каков наилучший способ обновления элемента, отмеченного кнопкой навигации NavigationView на кнопке «Назад»?

+0

Вы должны контролировать проверку и снятие флажка элементов в 'onBackPressed', когда вы обрабатываете стек. –

ответ

0

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

// код .....

NavigationView navigation = (NavigationView)getActivity().findViewById(R.id.navigation_view); 
Menu drawer_menu = navigation.getMenu(); 
MenuItem menuItem; 
menuItem = drawer_menu.findItem(R.id.Id_ofYourMenuItem); 
    if(!menuItem.isChecked()) 
    { 
     menuItem.setChecked(true); 
    } 

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

+0

Это, безусловно, работает в том, что касается пункта меню в навигационном ящике. Однако на самом деле вам нужно вызвать menuItem.setChecked (true) внутри 'onOptionsItemSelected '. Ваш метод также не работает, когда нажата кнопка «Назад», потому что при нажатии назад изображение вытягивается из кеша и не перерисовывается. – edwoollard

+0

@edwoollard, я опубликовал рабочий код, который я использовал в своем приложении .... он работает над нажатием кнопки возврата. – Intimate

+0

Он должен работать, потому что фрагменты перерисовываются. Я больше имел в виду действия, так как это не сработает для них, поскольку они сидят на заднем стеке. – edwoollard

1

для будущих пользователей здесь другое решение:

мой drawer_menu.xml, как:

<item 
       android:id="@+id/Home" 
       android:title="Home" 
       android:icon="@drawable/ic_account_balance_black_24dp" 
       > 

      </item> 
<item 
      android:id="@+id/courses" 
      android:title="courses" 
      android:icon="@drawable/ic_airplay_black_24dp" 
      > 

     </item> 
     <item 
      android:id="@+id/download" 
      android:title="Download" 
      android:icon="@drawable/ic_file_download_black_24dp" 
      > 

     </item> 

0: дом
1: курсы
2: скачать

Теперь в вашем Mainactivity: (im, показывающий только код цели навигации)

private private NavigationView navigationView; 

protected void onCreate(Bundle savedInstanceState) 
{ 
navigationView= (NavigationView) findViewById(R.id.navview); 

} 

Теперь вручную создать метод в mainactivity, чтобы вызвать этот метод из фрагмента когда фрагмент резюме:

public void SetNavItemChecked(int id) 
    { 
     Menu m=navigationView.getMenu(); 
     MenuItem mi=m.getItem(id); 
     mi.setChecked(true); 
    } 

Теперь во всех фрагментах в этом exmple Homefragment, CoursesFragment, DownloadFragments являются фрагментами

в HomeFragment (YourFragment):

переопределение onresume метод:

@Override 
     public void onResume() { 
      super.onResume(); 

      ((MainActivity)getActivity()).SetNavItemChecked(0); 
      // MainActivity is your activity 
      //SetNavItemChecked is method from activity and 0 is first item in menu for this example o is HomeFragment 
} 

и для всего остального фрагмента вы можете написать в методе возобновления, например выше

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