我有PageAdapter
一周中的几天,对于每个寻呼机,我都有相同的布局。我的问题是如何在更改日期时更新正确的listView。当我改变传呼机创建新的寻呼机并删除其他时,当发生这种情况时,我的列表视图指向新的寻呼机但不是当前的。例如,是wedneyday,我保存listview引用,当我改变星期二时,星期一寻呼机是创建,星期四被删除,我的参考点到最后一页创建(星期一)但我在星期二。
我的页面适配器:
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;
}
我希望ListView
总是指向当前项目的列表视图。
答案 0 :(得分:41)
阅读这篇文章:PagerAdapter
您可以在PagerAdapter中实现此功能:
public int getItemPosition(Object object){
return POSITION_NONE;
}
之后,您可以使用此功能:
yourPagerAdapterObject.notifyDataSetChanged();
如果您有太多的显示视图,则此方法很糟糕。所有视图总是重新计算。但在你的情况下,对于一些观点,它没关系。
答案 1 :(得分:5)
在PagerAdapter中覆盖getItemPosition更容易,但效率更低。
这样,当您调用notifyDataSetChanged()
时,视图寻呼机将删除所有视图并重新加载它们。因此,获得了重载效果。
在实例化新视图时,suggested by alvarolb中的另一个选项是setTag()
中的instantiateItem()
方法。然后,您可以使用notifyDataSetChanged()
来查找要更新的视图,而不是使用findViewWithTag()
。