我在里面有一个viewPager,我有几个片段。
providerViewPager = (ViewPager) findViewById(R.id.viewPager);
userRequest.add(1);
fragmentPagerAdapter = new FragmentStatePagerAdapter(HomeActivity.this.getSupportFragmentManager()) {
@Override
public int getCount() {
return userRequest.size();
}
@Override
public Fragment getItem(int position) {
return MyFragment.newInstance(position, userRequest.get(position));
}
};
providerViewPager.setAdapter(fragmentPagerAdapter);
userRequest是int的arrayList,对于此列表中的每个项目,我创建了一个MyFragment。
MyFragment包含每个页面的显示视图。
view.findViewById(R.id.mybutton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewPager viewPager = ((HomeActivity)getActivity()).getViewPager();
FragmentStatePagerAdapter adapter = ((HomeActivity)getActivity()).getAdapter();
ArrayList<Integer> ints = ((HomeActivity)getActivity()).getRequest();
viewPager.removeView(view);
ints.remove(getArguments().getInt("position"));
adapter.notifyDataSetChanged();
}
});
这是一个在我的片段中的onClickListener,我想在我点击它时删除这个当前片段。
正如你所看到我从我的Activity获取viewPager,适配器和arrayList,我尝试了一些方法来删除这个片段,这个工作但我得到了一些bug,例如我删除了一个元素在中间视图传呼机我无法在最后到达元素。我想知道它们是否对删除片段非常简单。
答案 0 :(得分:0)
我用这个来解决:
public void removeUserRequest(int position) {
if (position > 0) {
removeViewOnSwipe(position - 1);
} else {
removeViewOnSwipe(position);
}
}
private void removeViewOnSwipe(int position) {
userRequest.remove(position);
if (userRequest.size() == 0) {
providerViewPager.setVisibility(View.GONE);
fragmentPagerAdapter = null;
} else {
fragmentPagerAdapter = new FragmentStatePagerAdapter(HomeActivity.this.getSupportFragmentManager()) {
@Override
public int getCount() {
return userRequest.size();
}
@Override
public Fragment getItem(int position) {
return ProviderSwipeListFragment.newInstance(position, userRequest.get(position));
}
};
providerViewPager.setAdapter(fragmentPagerAdapter);
providerViewPager.setCurrentItem(position);
}
}
removeUserRequest是Fragment中的方法调用。 removeViewOnSwipe:我们删除userRequest列表中的项目。之后我创建了一个新的适配器。最后用
设置正确的新位置providerViewPager.setCurrentItem(position);
我尝试使用notifyDataSetChanged修改新的适配器,但是我遇到了一些错误,如果用户在滑动列表的末尾滚动很多,则可以看到前一个片段