11

PageAdapter每周都有这个,对于每个寻呼机我都有相同的布局。我的问题是如何在更改日期时更新正确的 listView。当我更改寻呼机创建新寻呼机并删除其他寻呼机的日期时,发生这种情况时,我的 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总是指向当前项目的列表视图。

4

2 回答 2

43

阅读这篇文章:PagerAdapter

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

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

之后,您可以使用此功能:

yourPagerAdapterObject.notifyDataSetChanged();

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

于 2012-05-16T06:47:33.713 回答
6

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

于 2014-05-13T15:00:36.177 回答