Android中从ViewPager中删除片段页我试图动态地从ViewPager中添加和删除片段,添加没有任何问题,但是删除并不像预期的那样有效。每次我要删除当前项时,最后一个项将被删除。我还尝试在适配器的getItemPosition方法中使用FragmentStatePagerAdapter或返回Location_None。我做错什么了?下面是一个基本的例子:MainActivity.javapublic class MainActivity extends FragmentActivity implements TextProvider {
private Button mAdd;
private Button mRemove;
private ViewPager mPager;
private MyPagerAdapter mAdapter;
private ArrayList<String> mEntries = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mEntries.add("pos 1");
mEntries.add("pos 2");
mEntries.add("pos 3");
mEntries.add("pos 4");
mEntries.add("pos 5");
mAdd = (Button) findViewById(R.id.add);
mRemove = (Button) findViewById(R.id.remove);
mPager = (ViewPager) findViewById(R.id.pager);
mAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
addNewItem();
}
});
mRemove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
removeCurrentItem();
}
});
mAdapter = new MyPagerAdapter(this.getSupportFragmentManager(), this);
mPager.setAdapter(mAdapter);
}
private void addNewItem() {
mEntries.add("new item");
mAdapter.notifyDataSetChanged();
}
private void removeCurrentItem() {
int position = mPager.getCurrentItem();
mEntries.remove(position);
mAdapter.notifyDataSetChanged();
}
@Override
public String getTextForPosition(int position) {
return mEntries.get(position);
}
@Override
public int getCount() {
return mEntries.size();
}
3 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
将FragmentPagerAdapter更改为FragmentStatePagerAdapter。这样做的原因是FragmentPagerAdapter将永远保存它加载到内存中的所有视图。FragmentStatePagerAdapter处理当前视图和可遍历视图之外的视图。 重写适配器方法getItemPosition(如下所示)。当我们打电话 mAdapter.notifyDataSetChanged();
ViewPager询问适配器以确定在定位方面发生了哪些变化。我们使用这种方法来表示所有的东西都改变了,所以重新处理所有的视图定位。
private class MyPagerAdapter extends FragmentStatePagerAdapter { //... your existing code @Override public int getItemPosition(Object object){ return PagerAdapter.POSITION_NONE; }}
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
public class MyFragmentAdapter extends FragmentStatePagerAdapter { private ArrayList<ItemFragment> pages; public MyFragmentAdapter(FragmentManager fragmentManager, ArrayList<ItemFragment> pages) { super(fragmentManager); this.pages = pages; } @Override public Fragment getItem(int index) { return pages.get(index); } @Override public int getCount() { return pages.size(); } @Override public int getItemPosition(Object object) { int index = pages.indexOf (object); if (index == -1) return POSITION_NONE; else return index; }}
pages.remove(position); // ArrayList<ItemFragment>adapter.notifyDataSetChanged(); // MyFragmentAdapter
MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager(), pages);viewPager.setAdapter(adapter);
- 3 回答
- 0 关注
- 903 浏览
添加回答
举报
0/150
提交
取消