簡體   English   中英

從片段中刪除viewPager中的片段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM