大佬教程收集整理的这篇文章主要介绍了从BackStack返回片段后,Android ViewPager无法正常显示,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
ViewPager中的每个项目都位于片段中,如下所示:
public static Fragment newInstance(MainHandHeldActivity context,int pos) { Bundle b = new Bundle(); b.puTint("pos",pos); return Fragment.instantiate(context,ObjectFragment.class.getName(),b); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE) { // Get menu image icons int icons[] = new int[3]; icons[0] = R.mipmap.ic_text; icons[1] = R.mipmap.ic_voice; icons[2] = R.mipmap.ic_mail; // Get root view of the fragment layout LinearLayout rootView = (LinearLayout) inflater.inflate( R.layout.fragment_collection_object,container,falsE); Bundle args = getArguments(); int pos = args.geTint("pos"); // Set the current menu image and text ImageView menuImg = (ImageView) rootView.findViewById(R.id.fragment_imagE); menuImg.setImageresource(icons[pos]); TextView menuText = (TextView) rootView.findViewById(R.id.menuTxt); switch (pos){ case 0: menuText.setText(MENU_HEADER_TEXT); break; case 1: menuText.setText(MENU_HEADER_VOICE); break; case 2: menuText.setText(MENU_HEADER_MAIL); // TODO Get number of messages and concatenate to String eg InBox (3) break; } // Set the current menu SELEction MainActivityInterface ai = (MainActivityInterfacE) getActivity(); ai.setCurrentSELEction(pos); return rootView; }
这些片段由页面适配器使用,如下所示:
public class CollectionPageAdapter extends FragmentPagerAdapter implements ViewPager.onPagechangelistener { private MainHandHeldActivity context; private FragmentManager fm; public CollectionPageAdapter(MainHandHeldActivity context,FragmentManager fm) { super(fm); this.fm = fm; this.context = context; } @Override public Fragment getItem(int position) { position = position % MainHandHeldActivity.PAGES; Log.d("POS","POSITION: " + position); return ObjectFragment.newInstance(context,position); } @Override public int getCount() { return MainHandHeldActivity.PAGES * MainHandHeldActivity.LOOPS; } }
这全部都放在另一个片段中,它将适配器设置在onCreateView方法中:
@Override public View onCreateView(LayoutInflater inflater,Bundle savedInstanceStatE){ // ... // // Scrolling menu pager = (ViewPager) view.findViewById(R.id.pager); adapter = new CollectionPageAdapter((MainHandHeldActivity)getActivity(),getFragmentManager()); pager.setAdapter(adapter); pager.addOnPagechangelistener(adapter); // Set current item to the middle page pager.setCurrentItem(MainHandHeldActivity.FIRST_PAGE); currentPage = MainHandHeldActivity.FIRST_PAGE; // Set number of pages pager.setOffscreenPageLimit(3); // Set no margin so other pages are hidden pager.setPageMargin(0); // ... // }
这个外部片段被添加到事务中,如下所示:
@H_412_9@mFragmentManagerer = getSupportFragmentManager(); mFragmenttransaction = mFragmentManagerer.begintransaction(); mMainFragment = new MainFragment(); mFragmenttransaction.add(R.id.fragmentContainer,mMainFragment,FRAG_MAIN); mFragmenttransaction.commit(); mFragmentManagerer.executePendingtransactions();
因此,在我的外部导航菜单片段中使用我的ViewPager片段时,当我从ViewPager中选择一个项目时,我将整个外部导航菜单放在BACkStack上:
public void replaceFragment(Fragment frag,String fragTag) { mFragmenttransaction = mFragmentManagerer.begintransaction(); mFragmenttransaction.replace(R.id.fragmentContainer,frag,fragTag); mFragmenttransaction.addToBACkStack(null); mFragmenttransaction.commit(); }
这一切都很好,直到这一点.但是,从BACkStack返回后(当我按下手机上的后退按钮时)viewPager不会显示图标,但它仍允许我循环浏览viewPager,在循环显示2或3项后,图标会再次出现.有谁知道为什么会这样?我有点不确定当它们被放置在BACkStack上并从BACkStack中检索时片段发生了什么.谢谢.
几个小时后我终于解决了这个问题.我找到here的解决方案只是在设置适配器时用’getChildFragmentManager()’替换’getFragmentManager()’:
pager = (ViewPager) view.findViewById(R.id.pager); // Added getChildFragmentManager in here adapter = new CollectionPageAdapter((MainHandHeldActivity)getActivity(),getChildFragmentManager()); pager.setAdapter(adapter); pager.addOnPagechangelistener(adapter); // Set current item to the middle page pager.setCurrentItem(MainHandHeldActivity.FIRST_PAGE); Log.d("PAGER","pager setCurrentItem: " + MainHandHeldActivity.FIRST_PAGE); currentPage = MainHandHeldActivity.FIRST_PAGE; // Set number of pages pager.setOffscreenPageLimit(3); // Set no margin so other pages are hidden pager.setPageMargin(0);
以上是大佬教程为你收集整理的从BackStack返回片段后,Android ViewPager无法正常显示全部内容,希望文章能够帮你解决从BackStack返回片段后,Android ViewPager无法正常显示所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。