使用RecycleView删除条目 以及动画条目

第一步:

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 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 list;

        public MyAdapter(Context context, List 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);
}

你可能感兴趣的:(使用RecycleView删除条目 以及动画条目)