.封装了一个基础的adapter.,用于recycleview的快捷使用
有BaseAdapter,BaseViewHolder,PAdapter,MainActivity

public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {

    public List<T> mDatas;

    public LayoutInflater mLayoutInflater;
public Context mContext;
public int mLayout; public BaseAdapter(Context context,List<T> datas,int layout){
this.mDatas=datas;
this.mContext=context;
this.mLayout=layout;
mLayoutInflater =LayoutInflater.from(context);
} @Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= mLayoutInflater.inflate(mLayout,null,false);
return new BaseViewHolder(view);
} @Override
public void onBindViewHolder(BaseViewHolder holder, int position) {
T t =getItem(position); bindData(holder,t);
} public T getItem(int position){
return mDatas.get(position);
} @Override
public int getItemCount() {
if(mDatas!=null && mDatas.size()>){
return mDatas.size();
}
return ;
} public List<T> getmData() {
return mDatas;
}
public void clearData(){
if(mDatas.size()> && mDatas!=null){
int presize= mDatas.size();
mDatas.clear();
notifyItemRangeRemoved(,presize);
}
} public void addData(int position,List<T> datas){
if (datas!=null && datas.size()>){
mDatas.addAll(datas);
notifyItemRangeInserted(position,mDatas.size());
}
} public abstract void bindData(BaseViewHolder viewHolder,T t);
}
public class BaseViewHolder extends RecyclerView.ViewHolder {
public SparseArray<View> views; public BaseViewHolder(View itemView) {
super(itemView);
views = new SparseArray<>(); } public TextView getTextView(int id){
return findView(id);
} public ImageView getImageView(int id){
return findView(id);
} public Button getButton(int id){
return findView(id);
} private <T extends View> T findView(int id){
View view =views.get(id);
if(view==null){
view = itemView.findViewById(id);
views.put(id,view);
}
return (T) view;
} }
public class PAdapter extends BaseAdapter<PayBean.Data> {

    public PAdapter(Context context, List<PayBean.Data> datas) {
super(context, datas, R.layout.view_rv_item);
} @Override
public void bindData(BaseViewHolder viewHolder, final PayBean.Data data) {
viewHolder.getTextView(R.id.tv_id).setText(data.getId());
viewHolder.getTextView(R.id.tv_openid).setText(data.getOpenid()); TextView tv_id= viewHolder.getTextView(R.id.tv_id);
TextView tv_openid= viewHolder.getTextView(R.id.tv_openid);
tv_openid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MyApplication.getContext(),data.getOpenid(),Toast.LENGTH_SHORT).show();
}
});
}
}
public class MainActivity extends AppCompatActivity {
private OkHttpHelper httpHelper =OkHttpHelper.getInstance();
private SwipeRefreshLayout swipeRefreshLayout;
@ViewInject(R.id.tv)
private TextView tv; private RecyclerView mRecyclerView;
private ArrayList<String> mDatas=new ArrayList<>();
private MaterialRefreshLayout materialRefreshLayout; private static final int STATE_NORMAL=;
private static final int STATE_REFRESH=;
private static final int STATE_MORE=;
private int state = STATE_NORMAL;
private List<PayBean.Data> mData; private int page=;
private int pagesize=;
private int totalpages=;
private PAdapter payAdapter;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mRecyclerView = findViewById(R.id.recycleview);
materialRefreshLayout =findViewById(R.id.refresh); initRefreshLayout();
getData(); } private void initRefreshLayout(){
materialRefreshLayout.setLoadMore(true);
materialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {
@Override
public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {
refreshData();
} @Override
public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
if(page<=totalpages){
loadMoreData();
}else{
Toast.makeText(MyApplication.getContext(),"没有更多内容了",Toast.LENGTH_SHORT).show();
materialRefreshLayout.finishRefreshLoadMore();
}
}
});
} private void loadMoreData(){
page=++page; state=STATE_MORE;
getData();
} private void refreshData(){
page=;
state=STATE_REFRESH;
getData();
} private void getData(){
String url=Api.BASE_URL+"&page="+page+"&pagesize="+pagesize;
httpHelper.get(url, new BaseHttpCallback() {
@Override
public void onRequestBefore(Request request) { } @Override
public void onSuccess(Response response, String string) {
PayBean payBean =JSON.parseObject(string,PayBean.class); page= payBean.getPageindex();
totalpages =payBean.getTotalpages();
mData = payBean.getData(); showData(); } @Override
public void onError(Response response, int code, Exception e) { } @Override
public void onFailure(Exception e) { }
});
} private void showData(){ switch (state){
case STATE_NORMAL:
payAdapter = new PAdapter(getApplicationContext(),mData); mRecyclerView.setAdapter(payAdapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(MyApplication.getContext()));
/*mRecyclerView.setAdapter(new BaseAdapter<PayBean.Data>(MyApplication.getContext(),mData,R.layout.view_rv_item) { @Override
public void bindData(BaseViewHolder viewHolder, final PayBean.Data data) {
viewHolder.getTextView(R.id.tv_id).setText(data.getId());
viewHolder.getTextView(R.id.tv_openid).setText(data.getOpenid()); viewHolder.getTextView(R.id.tv_openid).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MyApplication.getContext(),data.getOpenid(),Toast.LENGTH_SHORT).show();
}
});
}
});*/
//mRecyclerView.setLayoutManager(new LinearLayoutManager(MyApplication.getContext()));
break;
case STATE_REFRESH:
payAdapter.clearData();
payAdapter.addData(,mData);
mRecyclerView.scrollToPosition();
materialRefreshLayout.finishRefresh();
break;
case STATE_MORE:
payAdapter.addData(payAdapter.getmData().size(),mData);
mRecyclerView.scrollToPosition(payAdapter.getmData().size());
materialRefreshLayout.finishRefreshLoadMore();
break;
default:
break;
} } }

2个布局文件

activity_main和view_rv_item

main
<com.cjj.MaterialRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:wave_height_type="normal"
app:isLoadMore="true"
app:overlay="true"
app:wave_show="true"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycleview"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/> </com.cjj.MaterialRefreshLayout>
    <LinearLayout
android:id="@+id/item_layout"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_openid"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

recycleview的基础Adapter的更多相关文章

  1. 一个RecycleView的强大adapter

    代码地址如下:http://www.demodashi.com/demo/12218.html 前言 一般我们要在mainActivity中利用RecycleView展示一个列表数据的时候,adapt ...

  2. Andriod基础——Adapter类

    Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View,因为layout五花八门,很多数据都不能直接绑定上去,所以Android引入了Adapte ...

  3. IAdjustCountOption--动态设置recycleView的itemCount(不须要改动数据源)

    概述 RecycleViewUtil是新增的一个主要针对RecycleView的一个工具类.该工具类中提供了部分RecycleView可能会使用到的方法,当中也包含了一些用来增强HeaderRecyc ...

  4. Android之RecyclerView轻松实现下拉刷新和加载更多

    今天研究了下RecyclerView的滑动事件,特别是下拉刷新和加载更多事件,在现在几乎所有的APP显示数据列表时都用到了.自定义RecyclerView下拉刷新和加载更多听上去很复杂,实际上并不难, ...

  5. Android -- RecyclerView实现顶部吸附效果

    1,先来看一下今天实现的效果: 2,这次的效果是使用ItemDecoration来实践的,来看一看我们的实现吧 第一步:首先添加依赖,由于我们这些数据是请求网络的,所以一下我们添加网络框架依赖.Rec ...

  6. RecyclerView的Item的单击事件

    RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下: ...

  7. Android开发——RecyclerView特性以及基本使用方法(一)

    )关于点击事件,没有像ListView那样现成的API,但是自己封装起来也不难,而且我们使用ListView时,如果item中有可点击组件,那么点击事件的冲突也是一个问题,而在RecyclerView ...

  8. [Module] 03 - Software Design and Architecture

    本篇涉及内容: ORM框架(无需再用contentprovider或者sqlitedatebasehelper之类的古董工具了) 规划各种业务Bean文件(配合ORM框架) 设计一个好的请求基类(Ba ...

  9. Box(视图组件)如何在多个页面不同视觉规范下的复用

    本文来自 网易云社区 . 问题描述 Android App中的页面元素,都是由一个个Box(可以理解成一个个自定义View组件和Widget同级)组成,这些Box可以在不同的页面.不同的模块达到复用的 ...

随机推荐

  1. labview初始学习过程中遇到串口读取框红蓝色交替闪烁的处理

           labview工程的程序框图VISA串口读取框红蓝交替闪烁,前面板接收数据错乱,或者是接受不了,这是你不小心设置了断点.

  2. 分支push不上去的问题

    还原一下现场,我在自己的项目里面,从master里面checkout的一个分支,当我在我这个分支里面进行 push代码的操作,我突然发现我的代码不能执行push的操作,如图 这个原因是由于远端的仓库没 ...

  3. java 堆栈内存分析详解

    计算机术语里面堆和栈代表不同的存储结构:stack-栈:heap-堆 所以java虚拟机(JVM)中堆和栈是两种内存 堆.栈对比 对比点 堆 栈 JVM中的功能 内存数据区 内存指令区 动静态 运行时 ...

  4. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(二):Apache安装和配置

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  5. Android 数据库 ANR的例子

    android 开启事务之后,在其他线程是不能进行增删改查操作的.例子如下: 首先,一个线程里面去开启事务,里面对数据库的任何操作都没有. DBAdapter.getInstance().beginT ...

  6. Android Stadio调试gradle 插件 || Android Stadio 远程调试 || Anroid APT调试

    有时候,自己开发了gralde插件,想调试一下.毕竟打印log 成本太高.效率太低.怎么做呢? 第一种方法: 1.执行gradlew 命令的时候,加上几个参数:-Dorg.gradle.debug=t ...

  7. Encrypted bootloader (程序BIN文件加密及在线升级)

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...

  8. PRO*C 函数事例 3 -- 游标使用

    1.Oracle中的游标    Oracle使用两种游标: 显式游标和隐式游标. 不管语句返回多少条记录, Oracle为每条使用的SQL语句隐式地定义一个游标. Oracle为每个DELETE , ...

  9. vuex的使用及持久化state的方式详解

    vuex的使用及持久化state的方式详解 转载  更新时间:2018年01月23日 09:09:37   作者:baby格鲁特    我要评论 这篇文章主要介绍了vuex的使用及持久化state的方 ...

  10. C++学习014函数值传递和地址传递

    当我们给一个函数传参数的时候,可以直接值传入函数,也给可以把一个地址传入函数 区别就是一个本身不被改变,而另一本身也在改变, 在开发时候都会用到, 这里做下记录 #include <iostre ...