我有2个片段(1,2)。 单击一个按钮(片段1)之后转换(片段2)。如果点击一个按钮,则从(片段2)开始我转到(new_activity)。我的问题是当我从(new_activity)返回时我想去回到(片段2)&然后到(片段1),但它直接转到片段1.我无法将(片段2)添加到addTOBackStack。
// method to handle click event of category
public void onClick(View v) {
FragmentManager fragmentManager = getActivity()
.getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
int categoryId;
CategoryFragment a = new CategoryFragment();
Log.d("HomeFragment", v.getId() + "");
switch (v.getId()) {
case R.id.image_american_chiffon:
categoryId = 1;
bundle.putInt("categoryId", categoryId);
a.setArguments(bundle);
ft.replace(R.id.contentFrame, a);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
break;
case R.id.image_nagma:
categoryId = 2;
bundle.putInt("categoryId", categoryId);
a.setArguments(bundle);
ft.replace(R.id.contentFrame, a);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
break;
}
ft.commit();
Log.e("BACK STACK COUNT",fragmentManager.getBackStackEntryCount()+"");
}
答案 0 :(得分:0)
每次调用replace方法时,都会创建该片段的新对象。您可以在隐藏状态的开头添加所有需要的片段,然后根据需要显示和隐藏。所以您不需要初始化每次,只需要显示所需的片段并隐藏其他片段。
要在开头添加片段,请执行以下操作:
Fragment myFragment = new CategoryFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.fragmentContainer, myFragment, SOME_TAG);
transaction.hide(myFragment);
transaction.commit();
而不是调用replace()方法,只需隐藏并显示所需的片段
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.show(getFragmentManager().findFragmentByTag(fragmentTagToBeShown));
transaction.hide(getFragmentManager().findFragmentByTag(currentFragmentTag));
transaction.commit();