android RecyclerView刷新数据源后item出现空白项

我在联系人界面使用searchview实现搜索,在关闭搜索的时候要重新恢复联系人数据。
我把RecyclerView中的mData数据源给clear了,mData是List类型的。
但是在clear之后我重新调用了加载数据源的方法之后,恢复的数据源在每一组数据顶部都会出现一行空白项,具体是:打开搜索,搜索完毕之后,重新加载数据源,每一组联系人都出现一行空白的item,这个操作操作几次,就出现几行空白的item。
看图
图片说明

下面是我的代码:

     @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //此处必须设置,告诉Fragment我们需要菜单,否则onCreateOptionsMenu()方法不会被回调
        setHasOptionsMenu(true);
        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.fragment_customers, container, false);
        mRv = (RecyclerView) view.findViewById(R.id.rv);
        mRv.setLayoutManager(mManager = new LinearLayoutManager(getActivity()));
        initDatas();
        //initDatas(getResources().getStringArray(R.array.provinces));
        initData(view);
        return view;
    }

加载数据源的代码

  private void initData(View view) {
        adapter=new UserAdapter(getActivity(), mDatas);
        mRv.setAdapter(mAdapter =adapter);
        mDecoration=null;
        mRv.addItemDecoration(mDecoration = new TitleItemDecoration(getActivity(), mDatas));
        //如果add两个,那么按照先后顺序,依次渲染。
        //mRv.addItemDecoration(new TitleItemDecoration2(this,mDatas));
        mRv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));

        //使用indexBar
        mTvSideBarHint = (TextView) view.findViewById(R.id.tvSideBarHint);//HintTextView
        mIndexBar = (IndexBar) view.findViewById(R.id.indexBar);//IndexBar
        mIndexBar.setmPressedShowTextView(mTvSideBarHint)//设置HintTextView
                .setNeedRealIndex(true)//设置需要真实的索引
                .setmLayoutManager(mManager)//设置RecyclerView的LayoutManager
                .setmSourceDatas(mDatas);//设置数据源

        adapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View v, int position) {
                UserInfo userInfo= mDatas.get(position);
                Intent intent=new Intent(getActivity(),CustomersDetailsActivity.class);
                intent.putExtra("name",userInfo.getName());
                startActivity(intent);

                //Toast.makeText(getActivity(), "pos:"+position, Toast.LENGTH_SHORT).show();
            }
        });
    }

关闭搜索的代码

      searchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                Toast.makeText(getActivity(), "关闭搜索", Toast.LENGTH_SHORT).show();
                mDatas.clear();
                initDatas();
                initData(view);
                //adapter.notifyItemRangeChanged(0,mDatas.size());
                adapter.notifyDataSetChanged();
                return false;
            }
        });

我在国内国外都找了,好像没有发现有谁出现这样的问题,不知道哪里出问题了,还请各位高手指点下。

2个回答

这个可能是你clear了只是list的数据,却没用清除它的元素,导致空元素的出现了吧。

解决了吗,这个是数据中有一个Items是静态的,你的每次增加一个数据它都会默认的在之前的静态基础上再增加Items,如果你每次增加都会出现新的空白,具体好像是在Items中的一个间距计算类中;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐