从片段

时间:2017-10-25 15:06:38

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

我在里面有一个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,例如我删除了一个元素在中间视图传呼机我无法在最后到达元素。我想知道它们是否对删除片段非常简单。

1 个答案:

答案 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修改新的适配器,但是我遇到了一些错误,如果用户在滑动列表的末尾滚动很多,则可以看到前一个片段