2016-11-26 2 views
0

Мой текущий Android приложение имеет два фрагмента: -Как правильно показать/скрыть фрагмент Android?

ListFragment 
Detailfragment 

Мой Компоновка XML напоминает: -

<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_anchorGravity="bottom" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
</FrameLayout> 

отобразилась ListFragment первый следующим образом: -

final FragmentManager fragmentManager = getFragmentManager(); 
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(containerId, mListFragment, LIST_FRAGMENT_TAG); 

if (mLandscape) { 
} else { 
     fragmentTransaction.addToBackStack(LIST_FRAGMENT_TAG); 
} 

fragmentTransaction.commit(); 

Когда пользователь клики на элементе списка, я хочу скрыть список, чтобы сохранить текущую позицию в списке и т. д. и отобразить detailFragment.

Heres код я использую, чтобы выполнить это изменение пользовательского интерфейса: -

mDetailFragment = new DetailFragment(); 

final Bundle fragmentArguments = new Bundle(); 
fragmentArguments.putString(ITEM_KEY, item.getKey()); 
mDetailFragment.setArguments(fragmentArguments); 

final FragmentManager fragmentManager = getFragmentManager(); 
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

if (mLandscape) { 
    fragmentTransaction.replace(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG); 
} else { 
    fragmentTransaction.hide(mListFragment); 
    fragmentTransaction.add(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG); 
} 

fragmentTransaction.commit(); 

Приведенный выше код все работает отлично, и я могу перейти между списком и Detail Фрагменты успешно.

Проблема заключается в том, что, когда пользователь нажимает кнопку BACK BUTTON на фрагменте детали, чтобы вернуться в список, они возвращаются на пустой экран.

У меня есть этот код в моей деятельности, чтобы удалить фрагмент детали и показать фрагмент скрытого списка: -

@Override 
    public void onBackPressed() { 

     if (mLandscape) { 
     } else { 

     if (mListFragment.isHidden()) { 
      final FragmentManager fragmentManager = getFragmentManager(); 
      final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.remove(mDetailFragment); 
      fragmentTransaction.show(mListFragment); 
      fragmentTransaction.commit(); 
     } 
    } 
    super.onBackPressed(); 
} 

Почему fragmentTransaction.show(mListFragment); не показывать скрытое ListFragment?

ПРИМЕЧАНИЕ: Так что я всегда перестраивать свой пользовательский интерфейс полностью на изменения ориентации я прошел нулевой сверток super.onCreate(savedInstanceStateNull);

private final Bundle savedInstanceStateNull = null; 
    private boolean mLandscape = false; 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceStateNull); 
     setContentView(R.layout.activity_article_list); 

     mLandscape = getResources().getBoolean(R.bool.landscape); 

     final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     manageFragments(); 

    } 
+1

вопрос Ur является ListFragment в кожевенном постион – Nithinlal

+1

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

+1

еще одна вещь просто удалите еще часть из on onBackPressed и вызовите popBackStack() – Nithinlal

ответ

0

Вот как я установил этот вопрос: -

Сначала удалите мой перекрываться onBackPressed()

Изменить дисплей ListFragment к этому: -

final FragmentManager fragmentManager = getFragmentManager(); 
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(containerId, mListFragment, LIST_FRAGMENT_TAG); 

fragmentTransaction.commit(); 

Изменить дисплей detailFragment к этому: -

mDetailFragment = new DetailFragment(); 

final Bundle fragmentArguments = new Bundle(); 
fragmentArguments.putString(ITEM_KEY, item.getKey()); 
mDetailFragment.setArguments(fragmentArguments); 

final FragmentManager fragmentManager = getFragmentManager(); 
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

if (mLandscape) { 
    fragmentTransaction.replace(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG); 
} else { 
    fragmentTransaction.hide(mListFragment); 
    fragmentTransaction.add(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG); 
    fragmentTransaction.addToBackStack(DETAIL_FRAGMENT_TAG); 
} 

fragmentTransaction.commit();