如何更新ViewPager内容?

时间:2012-05-16 01:54:10

标签: android listview android-viewpager pager indicator

我有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总是指向当前项目的列表视图。

2 个答案:

答案 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()