RecyclerView的条目拖拽和条目滑动

来源:互联网 发布:尿不湿推荐 知乎 编辑:程序博客网 时间:2024/05/22 14:58
public class MainActivity extends AppCompatActivity implements StartDragListener {    private RecyclerView mRecyclerView;    private ItemTouchHelper mItemTouchHelper;    private MyAdapter mMyAdapter;    private ArrayList<String> mListData = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initListData();        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));        mMyAdapter = new MyAdapter(mListData, this);        mRecyclerView.setAdapter(mMyAdapter);        //条目触摸类        ItemTouchHelper.Callback callback = new MyItemTouchHelperCallback(mMyAdapter);        mItemTouchHelper = new ItemTouchHelper(callback);        mItemTouchHelper.attachToRecyclerView(mRecyclerView);    }    private void initListData() {        for (int i = 0; i < 50; i++) {            mListData.add("我是 " + i);        }    }    @Override    public void onStartDrag(RecyclerView.ViewHolder viewHolder) {        mItemTouchHelper.startDrag(viewHolder);    }}


public class MyItemTouchHelperCallback extends Callback {    private OnItemTouchMoveListener mOnItemTouchMoveListener;    public MyItemTouchHelperCallback(OnItemTouchMoveListener onItemTouchMoveListener) {        this.mOnItemTouchMoveListener = onItemTouchMoveListener;    }    //判断动作类型 滑动或拖拽    @Override    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {        int dagFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN;        int swipFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;        int flag = makeMovementFlags(dagFlag, swipFlag);        return flag;    }    @Override    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {        if (viewHolder.getItemViewType() != target.getItemViewType()) {            return false;        }        boolean result = mOnItemTouchMoveListener.onItemDragListener(viewHolder.getAdapterPosition(), target.getAdapterPosition());        return result;    }    @Override    public boolean isLongPressDragEnabled() {        return true;    }    @Override    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {        mOnItemTouchMoveListener.onItemSwipListener(viewHolder.getAdapterPosition());    }}
public class MyAdapter extends Adapter<MyAdapter.MyViewHolder> implements OnItemTouchMoveListener {    private ArrayList<String> mListData;    private StartDragListener mDragListener;    public MyAdapter(ArrayList<String> listData, StartDragListener mDragListener) {        this.mDragListener = mDragListener;        this.mListData = listData;    }    @Override    public boolean onItemDragListener(int formPosition, int toPosition) {        Collections.swap(mListData, formPosition, toPosition);        notifyItemMoved(formPosition, toPosition);        return false;    }    @Override    public boolean onItemSwipListener(int position) {        mListData.remove(position);        notifyItemRemoved(position);        return false;    }    public class MyViewHolder extends ViewHolder {        private TextView mTextView;        public MyViewHolder(View itemView) {            super(itemView);            mTextView = (TextView) itemView.findViewById(R.id.tv);        }    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_list_item, parent, false);        return new MyViewHolder(view);    }    @Override    public void onBindViewHolder(final MyViewHolder holder, int position) {        holder.mTextView.setText(mListData.get(position));        holder.mTextView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                if (event.getAction() == MotionEvent.ACTION_DOWN) {                    mDragListener.onStartDrag(holder);                }                return false;            }        });    }    @Override    public int getItemCount() {        return mListData.size();    }}


阅读全文
1 0
原创粉丝点击