我的麻烦是:当我获得新数据时,使用我的自定义适配器的viewpager不会更新视图。我发现许多程序员都有同样的bug,所以我尝试了很多建议,但没办法对我有用。很累。再一次,阅读我的来源,并帮助我理解为什么我失败了更新视图pleaseee! 这是我的FragmentAdapter:
private class SwipeyTabsPagerAdapter extends FragmentPagerAdapter implements
SwipeyTabsAdapter {
private final Context mContext;
private String[] datas;
public SwipeyTabsPagerAdapter(Context context, FragmentManager fm, String[] ds) {
super(fm);
this.mContext = context;
datas=ds;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int position) {
Log.e("new item:", datas[position]);
return SwipeyTabFragment.newInstance(datas[position]);
}
@Override
public int getCount() {
return datas.length;
}
public TextView getTab(final int position, SwipeyTabs root) {
TextView view = (TextView) LayoutInflater.from(mContext).inflate(
R.layout.swipey_tab_indicator, root, false);
view.setText(datas[position]);
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mViewPager.setCurrentItem(position);
}
});
return view;
}
}
这里是我设置适配器的地方:
SwipeyTabsPagerAdapter adapter = new SwipeyTabsPagerAdapter(getApplicationContext(), getSupportFragmentManager(),dicts);
mViewPager.setAdapter(adapter);
mTabs.setAdapter(adapter);
mViewPager.getAdapter().notifyDataSetChanged();
通过logcat,可以清楚地看到:只有第一次,newItem被处理,所以视图无法更新。
答案 0 :(得分:1)
我也遇到了这个问题并尝试了我在互联网上找到的所有内容,但它没有用。
工作解决方案是使用FragmentStatePagerAdapter而不是FragmentPagerAdapter。 FragmentPagerAdapter似乎是“不可变的”(至少它表现得那样)。
有关更多信息,请参阅此主题:
另一个有效的解决方案,但不好的是每次重新实例化(ViewPager,Adapter),以编程方式删除旧的并添加新的。
修改强>
我忘记了适配器中的一些重要内容,您还必须添加此方法:
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
答案 1 :(得分:0)
也在你的mTabs上调用notifyDataSetChanged()。请参阅SwipeyTabsView类中此方法的实现:
public void notifyDatasetChanged() {
if (mPager != null && mAdapter != null) {
initTabs();
measure(mWidthMeasureSpec, mHeightMeasureSpec);
calculateNewPositions(true);
}
}