神界码农-D-艾斯 2017-10-11 05:49 采纳率: 0%
浏览 8107

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;
            }
        });

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

  • 写回答

3条回答 默认 最新

  • BlackPigHe 2017-10-11 06:41
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思