第一步:
package text.ziguang.asus.recycleviewdelete; import android.content.Context; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MainActivity extends AppCompatActivity { private RecyclerView recycle; private ArrayList<String> list; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { recycle = (RecyclerView) findViewById(R.id.recycle); initData(); myAdapter = new MyAdapter(MainActivity.this, list); //创建一个条目触摸的回调 ItemTouchCallBack itemTouchCallBack = new ItemTouchCallBack(myAdapter); //设置给条目触摸的帮助类 ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemTouchCallBack); itemTouchHelper.attachToRecyclerView(recycle); recycle.setLayoutManager(new LinearLayoutManager(this)); recycle.setAdapter(myAdapter); } private void initData() { list = new ArrayList<>(); for (int i = 0; i <100 ; i++) { list.add("我是条目"+i); } } public class MyAdapter extends RecyclerView.Adapter<MyHolder> implements MoveSwipeListener{ private final Context context; private final List<String> list; public MyAdapter(Context context, List<String> list) { this.context=context; this.list=list; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = View.inflate(context, R.layout.layout_item, null); MyHolder holder =new MyHolder(v); return holder; } @Override public void onBindViewHolder(MyHolder holder, int position) { holder.tv.setText(list.get(position)); } @Override public int getItemCount() { return list.size(); } @Override public void onMove(int oldPosition, int newPosition) { //集合里边数据 Collections.swap(list, oldPosition, newPosition); // String oldS = dataList.get(oldPosition); // String newS = dataList.get(newPosition); // dataList.set(oldPosition,newS); // dataList.set(newPosition,oldS); //刷新适配器 this.notifyItemMoved(oldPosition, newPosition); } @Override public void swipe(int position) { //移除数据 list.remove(position); //单条目刷新 this.notifyItemRemoved(position); } } } class MyHolder extends RecyclerView.ViewHolder{ public final TextView tv; public MyHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); } }
第二步:
package text.ziguang.asus.recycleviewdelete; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; /** * Created by zhiyuan on 17/1/9. */ public class ItemTouchCallBack extends ItemTouchHelper.Callback { private final MainActivity.MyAdapter myAdapter; public ItemTouchCallBack(MainActivity.MyAdapter myAdapter) { this.myAdapter =myAdapter; } /** * 获取移动的标记 移动和删除 * @param recyclerView * @param viewHolder * @return */ @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { //设置移动的标记 int dragFlag=ItemTouchHelper.UP|ItemTouchHelper.DOWN|ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT; //设置删除的标记 int swipFlag=ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT; //制作两种标记 int i = ItemTouchHelper.Callback.makeMovementFlags(dragFlag, swipFlag); return i; } /** * * @param recyclerView * @param viewHolder 原先的viewHolder * @param target 拖动后的viewHolder * @return */ @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { //切换位置 int oldPosition = viewHolder.getAdapterPosition(); int newPosition = target.getAdapterPosition(); //交换位置-- myAdapter.onMove(oldPosition,newPosition); return true; } /** * 左右移动 * @param viewHolder * @param direction */ @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { int adapterPosition = viewHolder.getAdapterPosition(); myAdapter.swipe(adapterPosition); } }第三步:
package text.zihuang.asus.recycleviewdelete; /** * Created by zhiyuan on 17/1/9. */ public interface MoveSwipeListener { public void onMove(int oldPosition, int newPosition); public void swipe(int position); }