Remove Fragment Page from ViewPager in Android

前端 未结 17 1354
庸人自扰
庸人自扰 2020-11-22 17:20

I\'m trying to dynamically add and remove Fragments from a ViewPager, adding works without any problems, but removing doesn\'t work as expected.

Everytime I want to

17条回答
  •  無奈伤痛
    2020-11-22 17:37

    Try this solution. I have used databinding for binding view. You can use common "findViewById()" function.

    public class ActCPExpense extends BaseActivity implements View.OnClickListener,  {
    private static final String TAG = ActCPExpense.class.getSimpleName();
    private Context mContext;
    private ActCpLossBinding mBinding;
    
    private ViewPagerAdapter adapter;
    
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            setContentView(R.layout.act_cp_loss);
            mBinding = DataBindingUtil.setContentView(this, R.layout.act_cp_loss);
            mContext = ActCPExpense.this;
            initViewsAct();
    
    
        } catch (Exception e) {
            LogUtils.LOGE(TAG, e);
        }
    
    }
    
    
    private void initViewsAct() {
    
        adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(FragmentCPPayee.newInstance(), "Title");
        mBinding.viewpager.setAdapter(adapter);
        mBinding.tab.setViewPager(mBinding.viewpager);
    
    
    
    }
    
    
    
    @Override
    public boolean onOptionsItemSelected(MenuItem itemActUtility) {
        int i = itemActUtility.getItemId();
        if (i == android.R.id.home) {
            onBackPressed();
    
        } 
    
        return super.onOptionsItemSelected(itemActUtility);
    }
    
    @Override
    public void onClick(View view) {
        super.onClick(view);
        int id = view.getId();
        if (id == R.id.btnAdd) {
            addFragment();
    
        } else if (id == R.id.btnDelete) {
            removeFragment();
    
        }
    
    
    }
        private void addFragment(){
        adapter.addFragment(FragmentCPPayee.newInstance("Title");
        adapter.notifyDataSetChanged();
        mBinding.tab.setViewPager(mBinding.viewpager);
    }
    private void removeFragment(){
        adapter.removeItem(mBinding.viewpager.getCurrentItem());
        mBinding.tab.setViewPager(mBinding.viewpager);
    }
    
    
    class ViewPagerAdapter extends FragmentStatePagerAdapter {
        private final List mFragmentList = new ArrayList<>();
        private final List mFragmentTitleList = new ArrayList<>();
    
    
        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }
    
        @Override
        public int getItemPosition(@NonNull Object object) {
            return PagerAdapter.POSITION_NONE;
        }
    
    
        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }
    
        @Override
        public int getCount() {
            return mFragmentList.size();
        }
    
    
        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
    
        }
    
        public void removeItem(int pos) {
    
            destroyItem(null, pos, mFragmentList.get(pos));
            mFragmentList.remove(pos);
            mFragmentTitleList.remove(pos);
            adapter.notifyDataSetChanged();
            mBinding.viewpager.setCurrentItem(pos - 1, false);
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            return "Title " + String.valueOf(position + 1);
        }
    }
    
    
    }
    

提交回复
热议问题