美文网首页
Tablayout 和 ViewPager 联用时,向 Frag

Tablayout 和 ViewPager 联用时,向 Frag

作者: 叁点水 | 来源:发表于2018-07-10 20:53 被阅读116次

    在做项目的时候,用到 Tablayout 和 ViewPager 联用,ViewPager 里面是复用的几个 Fragment,需要的功能是切换 viewpager 时,传入相应的 position 到 fragment。

    mVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
        }
    
        @Override
        public void onPageSelected(int position) {
            mBundle.putInt("state",position);
            currentPage = position;
            Log.e("HuoDongActivity", "position---:" + position);
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
    
        }
    });
    

    用上面的方法在 activity 中传值,当滑动 viewpager 时,是没有问题的,可是当点击 tablayout 中的 tab 切换时,就会出现问题,传过去的 position 值不对应。

    刚开始是想把传入的这几个值与 fragment 绑定在一起,但是在写的时候没有找到合适的写法,就用了这种方法,以前这么做的时候,也没有发现这样的问题,这个问题第一次遇到,找了一下午也没有找到问题出在哪里。

    最后在网上找到了向 fragment 传值的另一种方法。

    @Override
    public Fragment getItem(int position) {
        HuodongFragment huodongFragment = (HuodongFragment) mFragments.get(position);
        Bundle bundle = new Bundle();
        bundle.putInt("state",position);
        bundle.putString("type",type);
        bundle.putString("tag",tag);
        huodongFragment.setArguments(bundle);
        return huodongFragment;
    }
    

    在 viewpager 的 adapter 中的 getItem() 方法中把需要的值传入到 fragment 中,这种传值的方法也是相当于把这几个值与 相应的 fragment 绑定到一起,就不会出现不对应的情况了。

    虽然需求达到了,但是出现的那个问题还是没有找到原因,以后再研究吧。

    相关文章

      网友评论

          本文标题:Tablayout 和 ViewPager 联用时,向 Frag

          本文链接:https://www.haomeiwen.com/subject/oaiqpftx.html