【问题标题】:Remove fragment in viewPager from fragment从片段中删除 viewPager 中的片段
【发布时间】:2017-10-26 18:18:21
【问题描述】:

我有一个 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 中删除视图?
  • 在删除片段之前尝试设置视图分页器的位置
  • ViewPager 负责自己的内容。如果您想更改某些内容,请更改适配器中的数据或当前位置。

标签: android android-fragments android-activity android-viewpager


【解决方案1】:

我用这个解决了:

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 重新创建新适配器的情况下执行此操作,但我遇到了一些错误,如果用户在滑动列表末尾滚动很多,则可以看到前一个片段

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多