Я работаю над приложением с вкладками с viewpager. Я использую фрагмент pixstatepageradapter для обработки вкладок viewpager. Я заменяю первый фрагмент вложенными фрагментами с помощью childFragmentmanager и добавляя текущий фрагмент к стопке. Управляющий поток выглядит следующим образом.Как очистить фрагмент фрагмента до указанного фрагмента?
Первая вкладка фрагмент A -> Заменено Фрагмент B -> Заменено Фрагмент C -> Заменено Фрагмент D.
Теперь, когда я нажимаю на определенной кнопке в фрагмента D, мне нужно вернуться к фрагмент B, очищая фрагменты C, D из задней части.
Я попытался
getSupportFragmentManager().popBackStack(
getSupportFragmentManager().getBackStackEntryAt(0).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
Но неудачная. Может ли кто-нибудь сказать мне правильный метод, чтобы очистить заднюю часть и перейти к фрагменту B из фрагмента D.? Это мой fragmentstatepageradapter
public class HomeViewPagerAdapter extends FragmentStatePagerAdapter {
CharSequence Titles[]; // This will Store the Titles of the Tabs which are
Context mcontext; // Going to be passed when ViewPagerAdapter is
int[] images; // created
int NumbOfTabs;
private Fragment mFragmentAtPos0;
SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
Fragment homefragment;
Context context;
FragmentManager fragmentmanager;
public HomeViewPagerAdapter(Context context, FragmentManager fm,
CharSequence mTitles[], int mNumbOfTabsumb) {
super(fm);
this.Titles = mTitles;
this.NumbOfTabs = mNumbOfTabsumb;
this.context = context;
this.fragmentmanager = fm;
}
@Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
if (position == 0)
{
SharedPreferences LoginPref = this.context.getSharedPreferences("login_credentials", Context.MODE_PRIVATE);
if (LoginPref.contains("login_pref") && LoginPref.getString("login_pref", "").equals("loggedin")) {
homefragment = new SearchHomeFragment();
} else {
homefragment = new HomeScreenFragment();
}
return homefragment;
} else if (position == 1)
{
HomeCategoriesFragment homecategoriesfragment = new HomeCategoriesFragment();
return homecategoriesfragment;
} else if (position == 2)
{
HomePriceComparisonFragment homepricecomparefragment = new HomePriceComparisonFragment();
return homepricecomparefragment;
} else if (position == 3)
{
HomeEnterFeedFragment homeenterfeedfragment = new HomeEnterFeedFragment();
return homeenterfeedfragment;
} else {
HomeMoreFragment homemorefragment = new HomeMoreFragment();
return homemorefragment;
}
}
@Override
public int getItemPosition(Object object) {
Log.e("getItemPosition", "getItemPosition");
if (object instanceof HomeScreenFragment)
return POSITION_NONE;
else
return POSITION_UNCHANGED;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
registeredFragments.remove(position);
if(MyTabFragment.shouldDestroy) {
super.destroyItem(container, position, object);
MyTabFragment.shouldDestroy=false;
}
}
public void resetScreendata() {
if (homefragment != null) {
homefragment.getChildFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
public void resettoSearch() {
if (homefragment != null) {
homefragment.getChildFragmentManager().popBackStack("search", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
public Fragment getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return Titles[position];
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return NumbOfTabs;
}
}
И это, как я заменить фрагмент.
final SearchHomeFragment newFragment = new SearchHomeFragment();
FragmentTransaction transaction =getChildFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left,R.anim.slide_in_left,R.anim.slide_out_right);
transaction.replace(R.id.fragment_mainLayout, newFragment);
transaction.addToBackStack("search");
transaction.commit();
Привет, Avijit Karmakar, я попытался дать имя, добавив заднюю часть и попытался выскочить из задней части стола и не работал. Мои вкладки viewpager и frag находятся внутри другого фрагмента для обработки отдельных стоп-кадра для каждой вкладки. И я использую homefragment.getChildFragmentManager(). PopBackStack («поиск», FragmentManager.POP_BACK_STACK_INCLUSIVE); для добавления последних добавленных 2 фрагментов. Все еще не работает. – Naz