[英]Remove fragment in viewPager from fragment
我里面有一個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,並嘗試了一些方法來刪除此片段,但這項工作卻遇到了一些錯誤,例如,如果我在視圖Pager的中間位置刪除了一個元素我無法到達最后的元素。 我想知道它們是否很容易刪除片段。
我用這個解決:
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來重新創建新的適配器,但是我遇到了一些錯誤,如果用戶在滑動列表的末尾滾動很多,則可以看到前面的片段
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.