Android:FragmentAdapter 和 pageview 不更新视图
Posted
技术标签:
【中文标题】Android:FragmentAdapter 和 pageview 不更新视图【英文标题】:Android: FragmentAdapter and pageview do not update the view 【发布时间】:2012-06-19 04:55:25 【问题描述】:我的麻烦是:当我获得新数据时,使用我的自定义适配器的 viewpager 不会更新视图。我发现许多程序员都有同样的错误,所以我尝试了很多建议,但对我没有任何帮助。很累。再来一次,阅读我的源代码并帮助我理解为什么我更新视图失败了! 这是我的 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被处理,所以视图不能更新。
【问题讨论】:
【参考方案1】:我也遇到了这个问题,尝试了我在互联网上找到的所有内容,但没有成功。
有效的解决方案是使用 FragmentStatePagerAdapter 而不是 FragmentPagerAdapter。 FragmentPagerAdapter 似乎是“不可变的”(至少它的行为方式是这样)。
更多信息请查看此帖:
Update ViewPager dynamically?
另一种可行但不好的解决方案是每次都重新实例化所有内容(ViewPager、Adapter),以编程方式删除旧的并添加新的。
编辑
我忘记了适配器中的一些重要内容你也必须添加这个方法:
@Override
public int getItemPosition(Object object)
return POSITION_NONE;
【讨论】:
【参考方案2】:在您的 mTab 上也调用 notifyDataSetChanged()。在 SwipeyTabsView 类中查看该方法的实现:
public void notifyDatasetChanged()
if (mPager != null && mAdapter != null)
initTabs();
measure(mWidthMeasureSpec, mHeightMeasureSpec);
calculateNewPositions(true);
【讨论】:
以上是关于Android:FragmentAdapter 和 pageview 不更新视图的主要内容,如果未能解决你的问题,请参考以下文章
Android开发技巧——PagerAdapter实现类的封装
Android开发技巧——ViewPager加View情况封装PagerAdapter的实现类
Android移动应用开发之Viewpage2+fragment实现微信滑动界面的效果
ViewPager Activity 通知特定事件的 Fragment