Android进阶之路 - 封装完善的BaseAdapter之BaseQuickAdapter
2017-11-13 14:44
295 查看
项目中现在已经很少用到ListView这款老控件了,大多用的RecyclerView,一般的话我们都自己有一些简单的封装,但是相对而言不是很完善,扩展性并不是很强,所有找到了BaseRecyclerViewAdapterHelper,它是一款BaseAdapter的集合体,在Github的Start较多,也较为好用,因为封装比较全面,下面有一些使用方法。
Effect :
提前引入
build.gradle (项目级):
build.gradle (app级):
现在即可调用BaseRecyclerViewAdapterHelper
TextAdapter (继承BaseQuickAdapter,只实现俩个方法即可,但是需要你绑定对应的model):
MainActivity (使用常规的RecyclerView控件即可,因为我们主要作用与Adapter方面):
MainActivity Xml :
TextBean :
注意(个人使用不完善) :
动画引入
事件监听
如操作Item内部子视图的点击和长按操作(如下面第一种,可处理内部多个事件,需要绑定对应的Id,但是需要在Adapter内设置设个事件)
*adapter需设置
使用方式
*
原作者Github地址
中文文档地址
此Demo下载地址
Effect :
提前引入
build.gradle (项目级):
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
build.gradle (app级):
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
现在即可调用BaseRecyclerViewAdapterHelper
TextAdapter (继承BaseQuickAdapter,只实现俩个方法即可,但是需要你绑定对应的model):
package com.bakheet.effect.adaptertext; import android.support.annotation.LayoutRes; import android.support.annotation.Nullable; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import java.util.List; /** * Created by YongLiu on 2017/11/10. */ public class TextAdapter extends BaseQuickAdapter<TextBean, BaseViewHolder> { public TextAdapter(@LayoutRes int layoutResId, @Nullable List data) { super(layoutResId, data); } @Override protected void convert(BaseViewHolder helper, TextBean item) { helper.setText(R.id.tv_item,item.getName()); helper.addOnClickListener(R.id.tv_btn).addOnLongClickListener(R.id.tv_btn); } }
MainActivity (使用常规的RecyclerView控件即可,因为我们主要作用与Adapter方面):
package com.bakheet.effect.adaptertext; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Toast; import com.chad.library.adapter.base.BaseQuickAdapter; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private RecyclerView mRv; private TextAdapter adapter; private ArrayList<TextBean> lists; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lists = new ArrayList<TextBean>(); initData(); mRv = (RecyclerView) findViewById(R.id.rv); mRv.setLayoutManager(new LinearLayoutManager(this)); adapter = new TextAdapter(R.layout.item_layout, lists); mRv.setAdapter(adapter); adapter.openLoadAnimation(); // 默认提供5种方法(渐显、缩放、从下到上,从左到右、从右到左) // adapter.openLoadAnimation(BaseQuickAdapter.FOOTER_VIEW); adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { Toast.makeText(MainActivity.this, "触发子条目提示" + position, Toast.LENGTH_SHORT).show(); } }); adapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() { @Override public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) { Toast.makeText(MainActivity.this, "子条目长按提示" + position, Toast.LENGTH_SHORT).show(); return true; } }); adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { @Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { switch (view.getId()) { case R.id.tv_btn: Toast.makeText(MainActivity.this, "内部 - 子条目点击提示" + position, Toast.LENGTH_SHORT).show(); break; default: break; } } }); adapter.setOnItemChildLongClickListener(new BaseQuickAdapter.OnItemChildLongClickListener() { @Override public boolean onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) { Toast.makeText(MainActivity.this, "内部 - 子条目长按提示" + position, Toast.LENGTH_SHORT).show(); return true; } }); } private void initData() { for (int i = 0; i < 55; i++) { TextBean textBean = new TextBean(); textBean.setName("吃土一个月" + i); lists.add(textBean); } } }
MainActivity Xml :
<?xml version="1.0" e d4f5 ncoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bakheet.effect.adaptertext.MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rv" /> </LinearLayout>
TextBean :
package com.bakheet.effect.adaptertext; /** * Created by YongLiu on 2017/11/10. */ public class TextBean { public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
注意(个人使用不完善) :
动画引入
// 默认提供5种方法(渐显、缩放、从下到上,从左到右、从右到左) // adapter.openLoadAnimation(BaseQuickAdapter.FOOTER_VIEW);
事件监听
//如只使用普通的Item点击和长按操作,可直接调用 adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { Toast.makeText(MainActivity.this, "触发子条目提示" + position, Toast.LENGTH_SHORT).show(); } }); adapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() { @Override public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) { Toast.makeText(MainActivity.this, "子条目长按提示" + position, Toast.LENGTH_SHORT).show(); return true; } });
如操作Item内部子视图的点击和长按操作(如下面第一种,可处理内部多个事件,需要绑定对应的Id,但是需要在Adapter内设置设个事件)
*adapter需设置
//一个点击一个长按helper.addOnClickListener(R.id.tv_btn).addOnLongClickListener(R.id.tv_btn);
使用方式
adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { @Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { switch (view.getId()) { case R.id.tv_btn: Toast.makeText(MainActivity.this, "内部 - 子条目点击提示" + position, Toast.LENGTH_SHORT).show(); break; default: break; } } }); adapter.setOnItemChildLongClickListener(new BaseQuickAdapter.OnItemChildLongClickListener() { @Override public boolean onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) { Toast.makeText(MainActivity.this, "内部 - 子条目长按提示" + position, Toast.LENGTH_SHORT).show(); return true; } });
*
原作者Github地址
中文文档地址
此Demo下载地址
相关文章推荐
- Android - 是时候为自己封装一个BaseRecyclerAdapter了
- Android 完美对BaseAdapter进行二次封装
- [android开发]封装BaseAdapter, 简便代码
- Android 之BaseRecyclerAdapter简单封装之路
- Android 对ListView和RecyclerView的两个BaseAdapter封装分享
- Android BaseAdapter的极简封装
- Android -- 带你一点点封装项目 MVP+BaseActivity+Retrofit+Dagger+RxJava(三)
- 利用反射实现对sqlite3数据库的crud(增删改查)操作的一个baseAndroidDao封装,安卓开发中
- Android BaseAdapter 适配基础类
- [置顶] Android谈谈封装那些事--BaseActivity和BaseFragment(一)
- 【Android UI】案例01Cover Flow3D效果的实现(Gallery+BaseAdapter)
- Android BaseAdapter notifyDataSetInvalidated()使用思考
- Android 基本控件的使用七(ListView+BaseAdapter)(demo)
- Android 中文 API (93) —— BaseExpandableListAdapter
- Android ListView与BaseAdapter的观察者模式实现
- Android中关于Adapter的使用(下)BaseAdapter
- Android 谈谈封装那些事 --BaseActivity 和 BaseFragment(二)
- Android开发:BaseExpandableListAdapter的使用
- Android基础类之BaseAdapter
- android baseadapter的getview调用两次