【发布时间】:2018-06-12 12:13:48
【问题描述】:
为了让我的选项卡保留之前输入的信息(如在 EditText 中),我将片段存储在 backstack 中,并在用户切换选项卡并返回前一个选项卡时尝试将其从 backstack 中弹出。
但“popBackStack()”方法似乎不起作用。这是我的代码 sn-p:
fragment = null;
fragment = Tab1.newInstance(1,categoryName.get(0));
fm = getSupportFragmentManager();
ft = fm.beginTransaction();
ft.replace(R.id.simpleFrameLayout, fragment);
ft.addToBackStack("tab1");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
tabListBuffer.add(tabLayout.getTabAt(0)); //Add the first tab to arrayList
// perform setOnTabSelectedListener event on TabLayout
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tabListBuffer.add(tab);
int count=0;
int temp=0;
for (int i = 0; i < tabListBuffer.size(); i++) {
if (tabListBuffer.get(i) == tab) {
temp=i+1;
count++;
}
final int str = temp;
if (count>=2)
tabRepeatPos=str;
}
// get the current selected tab's position and replace the fragment accordingly
fragment = Tab1.newInstance(tab.getPosition(), categoryName.get(tab.getPosition()));
String backStateName = fragment.getClass().getName();
fm = getSupportFragmentManager();
boolean fragmentPopped = fm.popBackStackImmediate();
ft = fm.beginTransaction();
ft.replace(R.id.simpleFrameLayout, fragment);
ft.addToBackStack("tab" + tab.getPosition());
if (fragmentPopped) {
fm.popBackStack("tab"+tabRepeatPos, 0);
fm.executePendingTransactions();
}
ft.commit();
}
我的代码有什么问题?我是否将“popBackStack()”方法放在了错误的位置?
请帮忙!
【问题讨论】:
标签: android fragment-backstack