在recycleview中刷新item的话,最好不要使用notifyDataSetChanged(),在RecycleView.Adapter中有两个方法,分别是notifyItemRemoved() 与 notifyItemInsert() ,用这两个方法可以刷新移除或者添加后的recycleview
下面是我的方法:
首先定义一个handler:
class ChangeHandler extends android.os.Handler{ public static String TAG = "ChangeHandler"; public ChangeHandler(Looper looper){ super(looper); } @Override public void handleMessage(Message msg) { switch (msg.what){ case CHANGE_WEEK_VIEW: AtyFinish.adapter.notifyDataSetChanged(); AtyFinish.listview.postInvalidate(); break; case DELETE_DATA: AtyFinish.adapter.notifyItemRemoved(msg.getData().getInt("position")); break; } super.handleMessage(msg); }
在RecycleView.Adapter中定义一个启动handler的方法:
void startHandler(int position){ Message msg = changeHandler.obtainMessage(); msg.what = DELETE_DATA; Bundle bundle = new Bundle(); bundle.putInt("position",position); msg.setData(bundle); changeHandler.sendMessage(msg); }最后在onBingViewHolder中,要执行删除的地方调用:
list.remove(position); startHandler(position);