我有一个ViewPager,其getCount();
根据通过构造函数传递的对象列表进行更改。我期望使用adapter.notifyDataSetChanged();
看到另一个页面。这似乎正常工作,但是当我从提到的列表中删除一项(用于计算getCount()
)时,ViewPager仅在offsetLimit之外成功删除该页面。
示例:我有两页,并通过按钮从列表中删除了一个项目。然后我打电话给notifyDataSetChanged()
,希望只剩下一页,但是……第二个“页面”仍然在那里,甚至以为我无法滑动到它!!!!
如何解决这个问题?我想避免用片段重新实例化整个ViewPager。
代码(简体)
public class Adapter extends FragmentStatePagerAdapter {
private final List<String> list;
public Adapter(FragmentManager fragmentManager, List<String> list) {
super(fragmentManager);
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
}
这是活动中的内容:
adapter = new Adapter(getSupportFragmentManager(), items);
final ViewPager pager = findViewById(R.id.pager);
pager.setAdapter(adapter);
findViewById(R.id.add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
items.add("test");
adapter.notifyDataSetChanged();
}
});
findViewById(R.id.remove).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
items.remove(items.size() - 1);
adapter.notifyDataSetChanged();
}
});
这样,我可以从Activity
添加项目并更新适配器(它可以工作)并删除...它不起作用。我该怎么办?
答案 0 :(得分:0)
您可以覆盖getItemPosition()
并在其中返回POSITION_NONE。
在宿主视图试图确定项目位置是否已更改时调用。如果给定项目的位置未更改,则返回 POSITION_UNCHANGED ;如果适配器中不再存在该项目,则返回 POSITION_NONE 。
默认实现假定项目不会改变位置,并且始终返回 POSITION_UNCHANGED 。