【问题标题】:How to update ViewPager content? [duplicate]如何更新 ViewPager 内容? [复制]
【发布时间】:2012-05-23 13:43:20
【问题描述】:

我有这个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 总是指向当前项的listview。

【问题讨论】:

标签: android listview android-viewpager pager indicator


【解决方案1】:

阅读这篇文章:PagerAdapter

你可以在PagerAdapter中实现这个功能:

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

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

yourPagerAdapterObject.notifyDataSetChanged();

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

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多