2013-07-19 3 views
1

Когда будет нажата btn Фрагмент 1, когда я нажму btn2 Фрагмент 2 будет отображаться, и я считаю, что фрагмент 1 помещен в заднюю часть. Во второй раз, когда я нажал на btn, мне захотелось отобразить его предыдущее состояние. Я включу код, который очень смутил меня, и я не уверен, как это сделать.Android - Как отобразить Фрагмент Backstack

btn.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
String str = "frag1"; 
Fragment videoFragment = new VideoPlayerFragment(); 
FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
transaction.replace(R.id.child_fragment, videoFragment, str); 
transaction.addToBackStack(null); 
transaction.commit(); 
} 
}); 

btn2.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
String str2 ="frag1"; 
String str3 ="frag2"; 
//FragmentManager.BackStackEntry backEntry= 
//getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager(). 
//getBackStackEntryCount()-1); 
//String str3 = backEntry.getName(); 
//Fragment fragment= getFragmentManager().findFragmentByTag(str3); 

Fragment videoFragment = new CopyOfVideoPlayerFragment(); 
FragmentTransaction transaction2 = getFragmentManager().beginTransaction(); 
transaction2.addToBackStack(str2); 
transaction2.replace(R.id.child_fragment, videoFragment, str3); 
transaction2.commit(); 
} 
}); 

некорректный код и не работает:

FragmentManager.BackStackEntry backEntry=getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager().getBackStackEntryCount()-1); 
String str3 = backEntry.getName(); 
Fragment fragment= getFragmentManager().findFragmentByTag(str3); 
+0

Так второй раз, когда вы нажали БТН, вы хотите отобразить Fragment1 снова правильно? – hardartcore

+0

Да, поэтому я хотел проверить, является ли это второй раз, когда btn нажата, если да, то получите его сохраненное состояние и снова отобразите его, добавив фрагмент 2 в backstack. Но также, я понятия не имею, чтобы получить предыдущую заднюю часть. с ошибками с моей backEntry. – rahstame

+0

Если вы хотите сохранить 'Fragment2' в backstack тоже, вам нужно добавить' Fragment1', так что «Fragment2» можно добавить в backstack. – hardartcore

ответ

0

Для отображения предыдущего fragtment (тот, в backStack), используйте этот код:

getSupportFragmentManager().executePendingTransaction(); 
+0

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

+0

Что вы можете контролировать в onSaveBundleInstances (Bundle inBundle) фрагмента, и вы получите тот же набор в onCreate (Bundle outBundle) того же фрагмента. –

0

Я думаю, что следующий способ может выполнить ваше требование,

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

2. Каждый раз, когда вы нажимаете кнопку, удалите старый, добавьте новое.

код

 FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.remove(fragment1); 
    ft.add(fragment2);