android开源系统brvah,Brvah——一个强大的Adapter框架
前言
在用到RecycleView的时候,通常会写一个adapter,然后是一堆的垃圾代码,为了让adapter用起来更简便,代码更少,今天介绍一个强大的adapter库------BRVAH
今天只是对此adapter对一般的点击事件及展示做一个介绍,更多使用方法,请参考上面链接
今天涉及知识:
BRVAH 框架配置
对界面展示及基本点击事件做简单"封装"
在activity中使用
一.BRVAH 框架配置
BRVAH的配置比一般的库配置要多出一步,就是配置maven。
1.1在project的build.gradle中配置maven
在project的build.gradle的allprojects下的repositories中配置,代码如下:
maven { url "https://jitpack.io" }
具体代码如下:
//在这里引入config.gradle
apply from:"config.gradle"
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
这里需要注意的有两点:
配置的是project的build.gradle,而不是app module的build.gradle
maven写在allprojects-->repositories 下,而不是buildscript -->repositories 下,切记!
1.2在app module的build.gradle中引入库依赖:
//我使用时,最新版本为 2.9.34
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34'
自此,BRVAH库配置完毕
二.写一个父类Adapter以供一般的adapter使用,adapter名称问为ComAdapter
注:此adapter只专注于一般的展示及点击事件,和简单header和footer的添加,若有比较复杂的用途,需要自己重新写一个adapter,此ComAdapter并不适用于复杂情况
ComAdapter代码如下:
package com.adapter;
import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.chad.library.adapter.base.animation.BaseAnimation;
import java.util.List;
/**
* Title:RecyclerView适配器基类
* Description:
*
* Created by pei
* Date: 2017/12/29
*/
public abstract class ComAdapter extends BaseQuickAdapter {
protected Context mContext;
protected ListmData;
protected int mItemViewId;//item布局id
protected View mHeaderView;
protected View mFooterView;
public ComAdapter(int itemViewId,Listdata,Context context) {
super(itemViewId, data);
this.mItemViewId=itemViewId;
this.mContext=context;
this.mData=data;
}
@Override
protected void convert(BaseViewHolder viewHolder, T t) {
initView(viewHolder,t);
initData(viewHolder,t);
setListener(viewHolder,t);
}
protected abstract void initView(BaseViewHolder viewHolder, T t);
protected abstract void initData(BaseViewHolder viewHolder, T t);
protected abstract void setListener(BaseViewHolder viewHolder, T t);
/**获取position,当添加有header或footer要注意改变**/
public int getPosition(BaseViewHolder viewHolder){
return viewHolder.getLayoutPosition();
}
/**获取headerView**/
protected View getHeaderView(int headerViewId) {
if(mContext!=null){
mHeaderView=LayoutInflater.from(mContext).inflate(headerViewId, null);
}
return mHeaderView;
}
/**获取footerView**/
protected View getFooterView(int footerViewId) {
if (mContext != null&&mFooterView==null) {
mFooterView = LayoutInflater.from(mContext).inflate(footerViewId, null);
}
return mFooterView;
}
/**添加headerView**/
public void addHeaderView(int headerViewId){
addHeaderView(getHeaderView(headerViewId));
};
/**添加footerView**/
public void addFooterView(int footerViewId){
addFooterView(getFooterView(footerViewId));
}
/**设置RecyclerView**/
public void setRecyclerManager(RecyclerView recyclerView){
LinearLayoutManager layoutManager=new LinearLayoutManager(mContext);
layoutManager.setSmoothScrollbarEnabled(true);
layoutManager.setAutoMeasureEnabled(true);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(this);
openLoadAnimation();//默认adapter渐现效果
}
/**adapter渐现动画**/
public void openAlphaAnimation(){
openLoadAnimation(BaseQuickAdapter.ALPHAIN);
}
/**adapter缩放动画**/
public void openScaleAnimation(){
openLoadAnimation(BaseQuickAdapter.SCALEIN );
}
/**adapter从下到上动画**/
public void openBottomAnimation(){
openLoadAnimation(BaseQuickAdapter.SLIDEIN_BOTTOM );
}
/**adapter从左到右动画**/
public void openLeftAnimation(){
openLoadAnimation(BaseQuickAdapter.SLIDEIN_LEFT );
}
/**adapter从右到左动画**/
public void openRightAnimation(){
openLoadAnimation(BaseQuickAdapter.SLIDEIN_RIGHT );
}
/**自定义动画**/
public void openLoadAnimation(BaseAnimation animation){
}
}
三.写自己的适配器NameAdapter,继承于ComAdapter
package com.adapter;
import android.content.Context;
import android.widget.TextView;
import com.brvahdemo.R;
import com.chad.library.adapter.base.BaseViewHolder;
import java.util.List;
/**
* Title:
* Description:
*
* Created by pei
* Date: 2017/12/29
*/
public class NameAdapterextends ComAdapter {
private TextView mTvName;
public NameAdapter(List data, Context context){
super(R.layout.item_layout,data,context);
}
@Override
protected void initView(BaseViewHolder viewHolder, Object o) {
mTvName=viewHolder.getView(R.id.tv_name);
}
@Override
protected void initData(BaseViewHolder viewHolder, Object o) {
mTvName.setText(o.toString());
}
@Override
protected void setListener(BaseViewHolder viewHolder, Object o) {
//mTvName点击事件
viewHolder.addOnClickListener(mTvName.getId());
}
}
涉及到的item_layout.xml布局代码很简单,如下:
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="vertical"
android:gravity="center_vertical"
android:background="#ff0000">
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:background="#0000ff"/>
四.在MainActivity中的简单使用
4.1先给出MainActivity的布局activity_main.xml,代码很简单,只做展示
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.brvahdemo.MainActivity"
android:orientation="vertical">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
4.2 MainActivity中使用代码
废话不多说,直接上代码是王道
package com.brvahdemo;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
import com.adapter.NameAdapter;
import com.base.AppActivity;
import com.chad.library.adapter.base.BaseQuickAdapter;
import java.util.Arrays;
import java.util.List;
import butterknife.BindView;
public class MainActivity extends AppActivity {
@BindView(R.id.recycler_view)
RecyclerView mRecyclerView;
private ListmNameList;
private NameAdapter mNameAdapter;
@Override
public int getContentViewId() {
return R.layout.activity_main;
}
@Override
protected void initData() {
mNameList= Arrays.asList("小明","小红","小芳","小花","小海","小林","小叶","小虎","小柔");
mNameAdapter=new NameAdapter(mNameList,mContext);//初始化NameAdapter
mNameAdapter.setRecyclerManager(mRecyclerView);//设置RecyclerView特性
mNameAdapter.addHeaderView(R.layout.item_header);//添加header
mNameAdapter.addFooterView(R.layout.item_footer);//添加footer
mNameAdapter.openLeftAnimation();//设置加载动画
}
@Override
protected void setListener() {
//item點擊事件
mNameAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(MainActivity.this, "onItemLongClick" + position, Toast.LENGTH_SHORT).show();
}
});
//子空控件点击事件
mNameAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(MainActivity.this, "onItemLongClick" + mNameList.get(position), Toast.LENGTH_SHORT).show();
}
});
}
}
其中addHeaderView时的R.layout.item_header.xml和addFooterView时的R.layout.item_footer.xml是随便写的布局,仅供测试之用,这里就不展示出来了。
ok,今天对BRVAH库的简单介绍就到这里了,谢谢诶。
android开源系统brvah,Brvah——一个强大的Adapter框架相关推荐
- android开源系统brvah,Android Jetpack之通用Adapter(Databinding+BRVAH)
之前发过一个databinding版的通用adapter,能实现一般需求,不过功能比较简陋,实际开发中大家更倾向于使用BRVAH等功能丰富的第三方框架.现在给出一个基于BRVAH的databindin ...
- android开源系统brvah,RecycleView开源项目BRVAH分析
为了更好的理解源码以及RecycleViewAdapter的机制,先上一幅图 RecycleView.PNG 其中HeaderView和FooterView可以包含多个View,LoadingMore ...
- android 剪贴板管理器,Clipper一个强大的剪贴板管理器为Android | MOS86
最重要的Android手机具有非常好的复制/粘贴功能.您只需点击并按下单词或输入字段,将出现复制或粘贴选项.如果您需要的不只是基本的复制和粘贴功能,例如访问剪贴板历史记录?您将需要一个第三方应用程序来 ...
- 快手Android上机面试:设计一个下载文件的框架
设计文件下载 一个开放的上机面试题,快手第一面就问到这个,听起来很随意,让你能想到什么就写什么,但我觉得没那么简单,我总结面试官考的是以下几点吧: 第一:考文件下载功能的实现 第二:考代码习惯,代码风 ...
- android dispatch input输入子系统,10.12 android输入系统_InputStage理论
android应用程序对输入系统的处理分为多个阶段,我们把这些阶段称为InputStage 理论处理流程: (1)activity发给window,如果window不能处理,再由activity处理; ...
- Android车载系统(HVAC) 原理+源码分析(代码示例)
前言 Android车载系统(HVAC)是一种用于控制车内温度.空气质量和湿度的系统,它是一项重要的汽车电子技术.在这种系统中,CarHvacManager控制器是一个重要的组件,它通过与车载传感器和 ...
- 一个强大的开源的基于Spring Boot开发的Web支付系统项目,支持聚合码支付
一个强大的开源的基于Spring Boot开发的Web支付系统项目,支持聚合码支付.
- Android系统(168)---Android 开源项目分类汇总
Android开源项目分类汇总 原网址:https://blog.csdn.net/prince77qiqiqq/article/details/51338330 Android 开源项目第一篇--个 ...
- GitHub上最火的22个Android开源项目源码(最少的一个也超过10k star)
GitHub上最火的22个Android开源项目源码均超万星 chat图表 最全android工具类库 29.6k start Android智能下拉刷新框架-SmartRefreshLayout 2 ...
- 这些Android开源库可以让你的逼格再升一个level
热文导读 | 点击标题阅读 金九银十跳槽季如何进阶找到合适满意的工作? JVM完全指南 2019届互联网校招薪资出炉!TMD整体超越 BAT.华为 来源:http://www.apkbus.com/b ...
最新文章
- P11 非线性系统-《Matlab/Simulink与控制系统仿真》程序指令总结
- 计算机审计中级培训结业考试,第二期计算机审计中级培训班结业考.doc
- 设置finder窗口大小_五个Finder技巧让你快速提高工作效率
- iOS中定时器NSTimer的使用
- 【模板】吉老师线段树
- java 二叉树特点_疯狂java笔记之树和二叉树
- 线程等待通知 linux,Java 线程协作 wait(等待)与 notiy(通知)
- linux history 用法,Linux之History的使用
- 华为云服务器怎样让网站显示不出来,云服务器网页不显示图片
- 初学者的回归测试,都该注意哪几点?
- 运行测试类(Test报错) Execution failed for task ‘:test‘.
- 我的世界Java版最诡异的种子_我的世界:MC出现诡异的种子,地域不停地重复
- 如何获取 Instagram 视频以及图片
- 计算机无法打开文档,电脑word文档打不开怎么办【原因分析及解决方法】
- dumprep.exe遇到无效指令
- 淘宝店铺运营,店铺访客增加但是浏览量减少这是为什么,应该怎样解决?
- 什么是TorchScript
- Https环境将key秘钥和crt格式证书转成cer证书
- vue小程序开发(四)首页 推荐
- 为什么微软是数字时代的领头羊?
热门文章
- 526个儿童游戏APP应用音效游戏声音集合音效素材 Kids Game Sound Effects
- 葡萄城报表模板库更新:新增6个行业、50张经典报表模板
- 印象笔记 离线版_印象笔记离线版
- python修改pdf内容_用Python把PDF文件转换成Word文档
- 网站地图在线生成html,sitemap_网站地图_站点地图_在线生成_专注在线服务工具开发与同步部署 - sitemap 生成器...
- android rtmp 播放器下载,android rtmp player 除了播放一般的视频格式 - 下载 - 搜珍网...
- 计算机仿真技术交通灯设计,交通灯的设计心得体会总结
- 数值分析常见基本算法及MATLAB代码总结
- java项目开发实例java+ssh+mysql实现的共享自行车单车租赁|出租管理系统
- 双曲正切函数(tanh)