.封装了一个基础的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. unity独立游戏开发日志2018/09/26

    最近太忙,今天吃饭的时候灵感一现...想到了随机地图生成的方法,不过可能实现的比较笨...还需要优化,大佬绕过. 注释没打,最后统一解释. using System.Collections; usin ...

  2. 文件 I/O缓冲流

    import java.io.File; import java.io.Writer; import java.util.StringTokenizer; import java.io.Reader; ...

  3. 001---Linux系统的启动过程

    Linux系统的启动过程 按下电源 开机自检(BIOS):检查cpu.内存.硬盘是否有问题,找到启动盘. MBR引导(master boot record):主引导记录,读取存储设备的512bytes ...

  4. 炒鸡简单的javaScript的call和apply方法

    解释一 作者:杨志 链接:https://www.zhihu.com/question/20289071/answer/14644278 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商 ...

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

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

  6. EF报错“EntityValidationErrors”

          在使用EF更新实体的时候报错,显示界面如下:       点击查看详情:        在查看详细的窗体中,EntityValidationErrors里面的也看不到具体的错误原因.在网上 ...

  7. Chrome也疯狂之Vimium插件

    Chrome也疯狂之安装Vimium插件 由于最近换上了Mac,深感外设的累赘,脱离了外接鼠标以及键盘之后发现操作更加的流畅了(可怜我入手不到一年的机械键盘).当然脱离鼠标用触摸板来操作浏览器有时候还 ...

  8. 云计算之路-阿里云上:基于Xen的IO模型进一步分析“黑色0.1秒”问题

    在发现云服务器读取OCS缓存的“黑色0.1秒”是发生在socket读取数据时,而且是发生在读取开始的字节,甚至在socket写数据时(比如写入缓存key)也会出现超过50ms的情况,我们的好奇心被激发 ...

  9. Wireshark lua dissector 对TCP消息包合并分析

    应用程序发送的数据报都是流式的,IP不保证同一个一个应用数据包会被抓包后在同一个IP数据包中,因此对于使用自制dissector的时候需要考虑这种情况. Lua Dissector相关资料可以见:ht ...

  10. Loadrunner11.0安装与简单使用

    公司开发了APP或者微信小程序啊什么的,都会先进行性能测试,而性能测试一般肯定会来测试接口的压测,并发.Loadrunner是一个很强大的测试工具,它是一种预测系统行为和性能的负载测试工具.通过以模拟 ...