.封装了一个基础的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. 初识python 函数(定义,传参,返回值)

    python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pa ...

  2. centos 7 关闭IPtables

    systemctl status iptables.service systemctl stopiptables.service

  3. Linux 控制台

    shell shell命令分为两种:分别是内部命令和外部命令. 内部命令:在安装的时候嵌入系统内核. 外部命令:以文件的形式存在. 可以使用type命令查看是内部命令还是外部命令. Linux中,默认 ...

  4. 暗影精灵3安装无线网卡驱动(ubuntu16.04)

    干货,无线网卡安装步骤: 1. 由于暗影精灵3的无线网卡较新,版本为Realtek Device b822,(查看命令为lspci | grep -i net,Ethernet controller代 ...

  5. Django信号的使用

    https://www.cnblogs.com/renpingsheng/p/7566647.html

  6. Less入门教程

    http://www.cnblogs.com/fsjohnhuang/p/4187675.html

  7. 第十六篇 Python之迭代器与生成器

    一.迭代器 一. 递归和迭代 生活实例说明什么是递归和迭代 A想去腾达大厦,问B怎么走路,B 说我不知道,我给你问问C,C也不知道,C又去问D,D知道,把路告诉了C,C又告诉B,B最后告诉A, 这就是 ...

  8. hdu5863 cjj's string game

    矩阵快速幂 #include<bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MOD = ...

  9. 使用Scrapy自带的ImagesPipeline下载图片,并对其进行分类。

    ImagesPipeline是scrapy自带的类,用来处理图片(爬取时将图片下载到本地)用的. 优势: 将下载图片转换成通用的JPG和RGB格式 避免重复下载 缩略图生成 图片大小过滤 异步下载 . ...

  10. Go基础篇【第1篇】: 内置库模块 OS

    os包提供了操作系统函数的不依赖平台的接口.设计为Unix风格的,虽然错误处理是go风格的:失败的调用会返回错误值而非错误码.通常错误值里包含更多信息.os包的接口规定为在所有操作系统中都是一致的.非 ...