Android 可拖拽的RecyclerView

      从项目中封装了一个拖拽RecyclerView的Demo,主要基于SDK提供了提供了一个类:ItemTouchHelper 。所有RecyclerView Item上下左右拖动,滑动删除均可以利用这个ItemTouchHelper实现。先上效果动图:

                                              

 

          这个简书:https://www.jianshu.com/p/4fd325786061,已经把函数功能讲解的很清楚了,这个Demo就是在这个文章的讲解基础上理解并封成的。Demo代码核心是,要自定义类实现ItemTouchHelper.Callback这个回调处理类,然后重写onMove这个移动处理回调函数。Demo已上传:https://download.csdn.net/download/crystal_xing/11259188

         源码如下,重要的地方都添加了详细的注释:

 MainActivity:

package com.example.draglist;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;

import com.example.draglist.adapter.StationListAdapter;
import com.example.draglist.bean.Station;
import com.example.draglist.helper.ItemTouchHelperCallback;
import com.example.draglist.helper.OnStartDragListener;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by xjc on 2019/6/25.
 */

public class MainActivity extends AppCompatActivity implements OnStartDragListener {

    private ItemTouchHelper mItemTouchHelper;
    private RecyclerView mMyStationList;
    private StationListAdapter mAdapter;
    private List<Station> mStationList = new ArrayList<>();
    LinearLayoutManager layoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        setUpList();
    }

    private void initView() {
        mAdapter = getAdapter();
        mMyStationList = findViewById(R.id.my_station_list);
        layoutManager = new LinearLayoutManager(this);
        mMyStationList.setNestedScrollingEnabled(false);
        mMyStationList.setAdapter(mAdapter);
        mMyStationList.setLayoutManager(layoutManager);
        ItemTouchHelper.Callback callback = new ItemTouchHelperCallback(mAdapter);
        mItemTouchHelper = new ItemTouchHelper(callback);
        mItemTouchHelper.attachToRecyclerView(mMyStationList);
    }

    private void setUpList() {
        falseData();
        setStationData(mStationList);
    }


    private StationListAdapter getAdapter() {
        if (mAdapter == null) {
            mAdapter = new StationListAdapter(this, this, false);
        }
        mAdapter.setOnItemClickListener((view, position, data) -> {
            Log.d("click", "click item");
        });
        return mAdapter;
    }


    private void setStationData(List<Station> stationList) {
        mStationList = stationList;
        mAdapter.setDataList(stationList);
        mAdapter.notifyDataSetChanged();
    }

    @Override
    public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
        mItemTouchHelper.startDrag(viewHolder);
    }

    //假数据
    private void falseData() {
        Station b1 = new Station();
        b1.setStationName("国际会议中心");
        b1.setStationNo("76");
        mStationList.add(b1);
        Station b2 = new Station();
        b2.setStationName("友好广场");
        b2.setStationNo("77");
        mStationList.add(b2);
        Station b3 = new Station();
        b3.setStationName("儿童医院");
        b3.setStationNo("78");
        mStationList.add(b3);
        Station b4 = new Station();
        b4.setStationName("一二九街");
        b4.setStationNo("79");
        mStationList.add(b4);
        Station b5 = new Station();
        b5.setStationName("人民广场");
        b5.setStationNo("80");
        mStationList.add(b5);
        Station b6 = new Station();
        b6.setStationName("奥林匹克");
        b6.setStationNo("81");
        mStationList.add(b6);
        Station b7 = new Station();
        b7.setStationName("太原街");
        b7.setStationNo("82");
        mStationList.add(b7);
        Station b8 = new Station();
        b8.setStationName("幸福一家");
        b8.setStationNo("83");
        mStationList.add(b8);
        Station b9 = new Station();
        b9.setStationName("星海广场");
        b
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值