我在联系人界面使用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;
}
});
我在国内国外都找了,好像没有发现有谁出现这样的问题,不知道哪里出问题了,还请各位高手指点下。