在ViewPager中,“ notifyDataSetChanged”未更新列表

时间:2018-08-28 11:16:12

标签: android android-viewpager

我正在使用ViewPager显示帖子列表,其适配器扩展了FragmentStatePagerAdapter。我面临的问题是,当删除任何帖子时,我正在调用以下方法从列表中删除该项目。但是视图未更新。当我滚动列表,然后再滚动时,该项目将从列表中删除。在getPositionItem中使用“ POSITION_NONE”会使我的屏幕空白为白色。

PagerAdapter中的方法:

       public class TestFragmentAdapter extends FragmentStatePagerAdapter  {
        Context mContext;
        LayoutInflater mLayoutInflater;
        private ArrayList<PostsDataItem> postList;

        public HomeFragmentAdapter(Context context, FragmentManager fm) {
            super(fm);
            this.mContext = context;
            this.postList = new ArrayList<>();
            mLayoutInflater = LayoutInflater.from(mContext);

        }

        @Override
        public Fragment getItem(int position) {
            return PostFragment.newInstance(postList.get(position), position);
        }

        public void removeItem(int position) {
            postList.remove(position);
            notifyDataSetChanged();
        }
/*
    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }*/

    }

2 个答案:

答案 0 :(得分:1)

您应该在适配器类中使用此代码来进行寻呼机刷新项目。

// This is called when notifyDataSetChanged() is called
@Override
public int getItemPosition(Object object) {
    // refresh all fragments when data set changed
    return PagerAdapter.POSITION_NONE;
}

答案 1 :(得分:0)

按如下所示更改getItemPosition并检查它是否不会引起任何问题:-

@Override
public int getItemPosition(Object object) {
    PostFragment fragment = (PostFragment)object;
        String title = fragment.getTitle();
        int position = titles.indexOf(title);

        if (position >= 0) {
            return position;
        } else {
            return PagerAdapter.POSITION_NONE;
        }

}