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

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 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧