2013-09-27 2 views
0

У меня есть андроид макет экран, показанный нижеAndroid Фрагментов - Как реализовать Backstacking и ссылаясь на предыдущий фрагмент

enter image description here

экрана приложений разделены на 3 фрагменты, верхние и нижние колонтитулы и содержание. Фрагменты заголовка и нижнего колонтитула фиксированы. Содержимое фрагмента изменяется в соответствии с содержимым. Я заменяю фрагмент1-фрагмент3 по необходимости. Первоначально Fragment1 отображается в области содержимого. Когда я нажимаю следующую кнопку, фрагмент1 заменяется фрагментом2. Это порядок. У меня вопрос, если я нажму другую предыдущую кнопку, как я могу вернуться к предыдущему фрагменту (фрагмент2 -> фрагмент1). Есть ли встроенный механизм в классе фрагментов.

Пожалуйста, наставит меня ...

заранее спасибо

+1

использовать функцию addToBackStack() функции FragmentTransaction. [Подробнее здесь] (http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack%28java.lang.String%29) – gnuanu

ответ

1

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

ft.addToBackStack(null); 

А теперь, если вы хотите вернуться из одного фрагмента к другому, то, сделать один способ ..

public void DeleteCurrentFragment() 
{ 
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

Fragment currentFrag = getSupportFragmentManager().findFragmentById(R.id.detailFragment); 


String fragName = "NONE"; 

if (currentFrag!=null) 
    fragName = currentFrag.getClass().getSimpleName(); 


if (currentFrag != null) 
    transaction.remove(currentFrag); 

transaction.commit(); 

} 

И после этого позвонить:

+0

OK работало ... Еще одно сомнение. Мое начальное Fragement - это фрагмент1, если я вызываю код выше (т.е. getSupportFragmentManager(). PopBackStack(); DeleteCurrentFragment();) он пуст. Как я могу найти, что я был в первом фрагменте. – Riskhan

+0

, для которого вы можете использовать метод findFragmentByTag(), в котором вы можете легко найти тег, который вам дал фрагмент, когда вы его инициализируете ........ – Piyush

+0

Есть ли какой-либо счет для backstack. Это легко, если счетчик равен нулю, а затем остановите popBackStack. – Riskhan

2

попробуйте этот код

FragmentTransaction tx = fragmentManager.beginTransation(); 
tx.replace(R.id.fragment, new MyFragment()).addToBackStack("tag").commit(); 
+0

ОК. Как я могу показать предыдущий фрагмент. Пожалуйста, дайте больше информации – Riskhan

+0

Вышеуказанная кнопка по умолчанию обращается к телефону. Если вы хотите самостоятельно обращаться к кнопке возврата, я предпочитаю поддерживать заднюю часть себя так, что мы можем сделать в соответствии с нашими требованиями. –

+0

Если вы хотите, чтобы какой-либо образец дал мне знать –

1

вы можете попробовать что-то вроде:

FragmentManager manager = getSupportFragmentManager(); 
FragmentTransaction ft = manager.beginTransaction(); 
ft.add(R.id.contentFragment, <your fragment>); 
ft.addToBackStack(null); 
ft.commit(); 

так предположим, что вы находитесь на fragment1 и после того, как вы сделаете то, что хотите, нажмите fragment2. n на вашем contentFragment вы можете add или replace фрагмент (fragment2 в этом случае) согласно вашему требованию. Теперь, когда вы вызываете addToBackStack, это означает, что эта транзакция добавляется в задний стек. Чтобы транзакция была запомнена после ее фиксации и изменит ее работу, когда позже выскочит из стека. Внутренне он поддерживает стек, поэтому вы не хотите ничего делать. Наконец, когда вы нажимаете кнопку «назад» от fragment2, она проверяет, имеет ли транзакция какой-либо фрагмент в своем стеке, если да, то он вызывает его. Это похоже на верхнюю часть стека. Когда вы вызываете addToBackStack в том, что стек фрагмент1 добавлен. Поэтому, когда вы нажимаете верхнюю кнопку, верхняя часть стека равна fragment1, поэтому он ее вызывает.

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

+0

Ницца ... как можно показать/вызвать предыдущий фрагмент, если я нажму предыдущую кнопку – Riskhan

+0

см. Редактирование, также дайте мне знать, что я где-то ошибаюсь. – thegiga

+0

ОК.Если я нажимаю предыдущую кнопку, как я могу удалить текущий фрагмент. – Riskhan

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