1. 程式人生 > >Tablayout 和 ViewPager 聯用時,向 Fragment 傳值的問題

Tablayout 和 ViewPager 聯用時,向 Fragment 傳值的問題

在做專案的時候,用到 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 繫結到一起,就不會出現不對應的情況了。

雖然需求達到了,但是出現的那個問題還是沒有找到原因,以後再研究吧。