Tablayout 和 ViewPager 聯用時,向 Fragment 傳值的問題
阿新 • • 發佈:2018-11-28
在做專案的時候,用到 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 繫結到一起,就不會出現不對應的情況了。
雖然需求達到了,但是出現的那個問題還是沒有找到原因,以後再研究吧。