android——basequickadapter结合recycleview使用、二级子项、网格多行多列、单选

前言

basequickadapter是由BRVAH(官方网站)提供的万用适配器,相比原始的适配器,能减少70%的代码

空布局:adapter.setEmptyView(R.layout. layout_list_empty, binding.rvRevertBottom),第一个参数为空布局的layout,第二个参数为recycleview

一、basequickadapter结合recycleview的简单使用

效果图:

引入包:


implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.28'

引入binding,在build.gradle里面加入


buildFeatures {
        dataBinding = true
        viewBinding true
    }

setting里面的两个repositories地方都加入


maven { url "https://jitpack.io" }

activity的代码

class MainActivity : AppCompatActivity() {
    private var _binding: ActivityMainBinding? = null
    private val binding get() = _binding!!

    private lateinit var adapter: ProjectRevertAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        _binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        initRecyclerView(getProjectDetailData())
    }

    private fun initRecyclerView(list: List<CProjectHeadBean>) {
        adapter = ProjectRevertAdapter(R.layout.item_project_detail, list)

        val mPerfectCourse = LinearLayoutManager(this)
        mPerfectCourse.orientation = LinearLayoutManager.VERTICAL// 设置 recyclerview 布局方式为横向布局
        binding.rvRevertBottom.layoutManager = mPerfectCourse
        // adapter.setEmptyView(R.layout.layout_list_empty, binding.rvRevertBottom)
        binding.rvRevertBottom.adapter = adapter

        adapter.onItemChildClickListener =
            BaseQuickAdapter.OnItemChildClickListener { adapter, view, position ->
                try {
                    when (view.id) {
                        R.id.rcl_revert_cl_contain -> {

                        }
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }
    }
}

详细的代码可到这里下载:https://download.csdn.net/download/wy313622821/87507403

单选:

// 单选
    fun singleChoice(pos: Int) {
        if (selectPosition == pos) return

        val item = data[selectPosition]
        if (item is LeftShelvesBean) {
            item.isSelect = false
            notifyItemChanged(selectPosition)
        }
        val itemCurrent = data[pos]
        if (itemCurrent is LeftShelvesBean) {
            itemCurrent.isSelect = true
            notifyItemChanged(pos)
        }
        selectPosition = pos
    }

多选:

fun multipleChoice(position: Int) {
        val item = data[position]
        if (item is ConsumeBean) {
            item.isSelect = !item.isSelect
            notifyItemChanged(position)
        }
    }

二、二级子项

效果图:

需要代码的朋友可以到这里下载:https://download.csdn.net/download/wy313622821/87508264

三、二级子项(泛型版本)

产生的背景:当你想两个页面用不同的两个子项的时候,又不想写两个基本完全一样的CProjectHeadBean的时候(只是其中的AbstractExpandableItem<T>()不一样),那就需要用到泛型来代替

demo下载地址:https://download.csdn.net/download/wy313622821/87525537

四、网格(多行多列)

简单的使用,效果图:

demo下载地址:https://download.csdn.net/download/wy313622821/87542124

附加知识:

想在预览图上显示recyclerview的item的话,可以在recyclerview加

tools:itemCount="1"
tools:listitem="@layout/item_label_setting_info"

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用ItemTouchHelper来实现RecycleView多布局的拖拽和滑动删除功能。下面是一个简单的示例代码: 1. 创建ItemTouchHelper.Callback ``` public class MyItemTouchHelperCallback extends ItemTouchHelper.Callback { private final ItemTouchHelperAdapter mAdapter; public MyItemTouchHelperCallback(ItemTouchHelperAdapter adapter) { mAdapter = adapter; } @Override public boolean isLongPressDragEnabled() { return true; } @Override public boolean isItemViewSwipeEnabled() { return true; } @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { mAdapter.onItemDismiss(viewHolder.getAdapterPosition()); } } ``` 2. 创建ItemTouchHelperAdapter ``` public interface ItemTouchHelperAdapter { void onItemMove(int fromPosition, int toPosition); void onItemDismiss(int position); } ``` 3. 在Adapter中实现ItemTouchHelperAdapter接口 ``` public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements ItemTouchHelperAdapter { private List<MyData> mData; ... @Override public void onItemMove(int fromPosition, int toPosition) { MyData item = mData.get(fromPosition); mData.remove(fromPosition); mData.add(toPosition, item); notifyItemMoved(fromPosition, toPosition); } @Override public void onItemDismiss(int position) { mData.remove(position); notifyItemRemoved(position); } } ``` 4. 在Activity或Fragment中添加ItemTouchHelper ``` ItemTouchHelper.Callback callback = new MyItemTouchHelperCallback(mAdapter); ItemTouchHelper touchHelper = new ItemTouchHelper(callback); touchHelper.attachToRecyclerView(mRecyclerView); ``` 注意:以上代码只是示例,具体实现需要根据自己的需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy313622821

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值