Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从BackStack返回片段后,Android ViewPager无法正常显示大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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中检索时片段发生了什么.谢谢.

@H_502_42@解决方法 @H_674_34@ 解决了!

几个小时后我终于解决了这个问题.我找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,请注明来意。