如何更新ViewPager的内容?

11

我有一个包含一周日期的PageAdapter,每个pager都有相同的布局。我的问题是如何在更改日期时更新正确的listView。当我更改日期时,Pager会创建一个新的pager并删除其他Pager,这时我的listView指向新的pager而不是当前的pager。例如,如果今天是星期三并且我保存了listView的引用,当我更改为星期二时,将创建星期一页面并删除星期四页面,我的引用将指向最后创建的页面(星期一),但实际上我是在星期二。

我的PageAdapter:

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


http://stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a - kartheeki j
2个回答

43

阅读此帖子:PagerAdapter

您可以在PagerAdapter中实现此函数:

public int getItemPosition(Object object){
     return POSITION_NONE;
}

之后,您可以使用此函数:

yourPagerAdapterObject.notifyDataSetChanged();

如果你需要展示太多的视图,那么这种方法就不太好。因为所有的视图都会被重新计算。但在你的情况下,对于某些视图来说,这是可以接受的。


请查看以下帖子:http://stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a - kartheeki j

6
重写 PagerAdapter 中的 getItemPosition 更容易,但效率略低。 这种方式下,在调用 notifyDataSetChanged() 时,视图页面将会删除所有视图并重新加载它们。因此获得了重新加载效果。 还有另一种方法,由 alvarolb 建议, 是在实例化新视图时在 instantiateItem() 中使用 setTag() 方法。然后,您可以使用 findViewWithTag() 而不是使用 notifyDataSetChanged() 来查找要更新的视图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接