0

У меня проблемы с пониманием Up Navigation в шаблоне Master Detail в Android. В режиме одиночной панели (для смартфонов) я использую ItemListActivity и ItemListFragment. Если элемент в элементе ListFragment щелкнут, вызывается ItemDetailFragment. Теперь, если я в этом ItemDetailFragment, я хочу вернуться к ItemListFragment щелчком по Up Navigation в ActionBar.Android: BackStack Navigation в Master Detail flow

Я понимаю это так: мне просто нужно заменить ItemDetailFragment на ItemListFragment или?

В моей ItemDetailFragment я использую этот код:

//OnClick auf ActionBar 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
      FragmentTransaction trans = getFragmentManager().beginTransaction(); 
      trans.replace(R.id.fragment_container, new ItemListFragment()); 
      trans.commit(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

Но ItemListFragment тогда не в состоянии до DetailFragment называлась. Я хочу иметь тот же список, что и раньше.

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

ответ

1

Насколько я понял с описанием выше ..

1) Если вы нажмете на .. в вашей Listfragment элемент, то вы движетесь к ItemdetailFragment так для этого в вашем ListFragment вы необходимо добавить Операция BackStack. то есть, как следует

transaction.addToBackStack(String);//to identify you can give any name 
transaction.commit(); //then commit the transaction 

2) Если вы хотите, чтобы перейти от вашего ItemdetailFragment к ListFragment вы используете кнопку назад в этом случае в BackButton вам нужно вызова

popBackStack("towhich screen you want to move",0) //for more informationreferthis

+0

Я добавил backstack с «вверх» и добавил эти строки в моей DetailFragment \t '// OnClick Ауф ActionBar \t @Override \t общественного булево onOptionsItemSelected (MenuItem элемент) { \t \t переключатель (item.getItemId()) { \t \t случай android.R.id.home:. \t \t \t android.app.FragmentManager человек = getActivity() getFragmentManager(); \t \t \t man.popBackStack ("up", 0); \t \t \t return true; \t \t} \t \t возвращение super.onOptionsItemSelected (item); \t}, но у меня все еще есть исключение NullPointer в ListFragment: 'feed = (RSSFeed) getActivity(). GetIntent(). GetExtras(). Get (" feed ");' Таким образом, ListFragment не совпадает с предыдущим , или? –

+0

Вы добавили addToBackStack ("вверх"); в вашем ListFragment? – Harish

2

с вашим текущим подходом вы создаете новый экземпляр ItemListFragment, поэтому, если вы хотите сохранить состояние списка, вам нужно сделать это самостоятельно. вам нужно просто вернуться назад, я бы предложил вызвать метод onBackPressed() для дома.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
      this.onBackPressed(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Спасибо за ваш ответ, мне пришлось изменить строку на 'this.getActivity(). OnBackPressed();' потому что я называю это в Фрагмент. К сожалению, в ItemListFragment есть NullpointerExcecption. Как я могу точно имитировать обратный щелчок, так как он работает? У вас есть идея? –

+0

Мне трудно найти причину NullpointerException без кода журналов ItemListFragment или logcat, но вы можете попробовать navigateUpTo() из NavUtils. Ниже приведены документы http://developer.android.com/reference/android/support/v4/app/NavUtils.html#navigateUpTo(android.app.Activity, android.content.Intent) и здесь вы можете узнать больше о Back vs. Вверх и навигация в целом: http://developer.android.com/design/patterns/navigation.html – fgeorgiew

+0

Да, я не хотел публиковать большую часть своего кода, потому что навигация работает с помощью кнопки «Назад». Поэтому я подумал, что есть простой способ реализовать это в моем фрагменте. Я посмотрю на ваши ссылки –

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

  • Нет связанных вопросов^_^