如何更新ViewPager内容?

wel*_*ade 10 android listview indicator pager android-viewpager

我有PageAdapter一周中的几天,对于每个寻呼机,我有相同的布局.我的问题是如何在更改日期时更新正确的listView.当我改变传呼机创建新的寻呼机并删除其他时,当发生这种情况时,我的列表视图指向新寻呼机而不是当前.例如,在wedneyday我保存列表视图的参考,当我在星期二改变周一寻呼机是创建和周四被删除,我的参考点,以最后一页创建(星期一),但我在星期二.

我的页面适配器:

ListView lvwConfig;

@Override
public Object instantiateItem(View pager, int position) {
    LayoutInflater inflater = (LayoutInflater) mContext
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.pager_layout, null);
    lvwConfig = (ListView) v.findViewById(R.id.lvwConfig);
    ((ViewPager) pager).addView(v, 0);

    return v;
}
Run Code Online (Sandbox Code Playgroud)

我想ListView总是指向当前项目的listview.

jul*_*ier 42

阅读这篇文章:PagerAdapter

您可以在PagerAdapter中实现此功能:

public int getItemPosition(Object object){
     return POSITION_NONE;
}
Run Code Online (Sandbox Code Playgroud)

之后,你可以使用这个功能:

yourPagerAdapterObject.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

如果您有太多的显示视图,则此方法很糟糕.所有视图总是重新计算.但在你的情况下,对于一些观点,它没关系.


Dav*_*ifi 5

在PagerAdapter中覆盖getItemPosition更容易,但效率更低.这样,当您调用时notifyDataSetChanged(),视图寻呼机将删除所有视图并重新加载它们.因此,获得了重载效果.alvarolb建议的另一个选项是setTag()instantiateItem()实例化新视图时使用方法.然后notifyDataSetChanged(),您可以使用findViewWithTag()查找要更新的视图而不是使用它.