recycleview的基础Adapter
.封装了一个基础的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的更多相关文章
- 一个RecycleView的强大adapter
代码地址如下:http://www.demodashi.com/demo/12218.html 前言 一般我们要在mainActivity中利用RecycleView展示一个列表数据的时候,adapt ...
- Andriod基础——Adapter类
Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View,因为layout五花八门,很多数据都不能直接绑定上去,所以Android引入了Adapte ...
- IAdjustCountOption--动态设置recycleView的itemCount(不须要改动数据源)
概述 RecycleViewUtil是新增的一个主要针对RecycleView的一个工具类.该工具类中提供了部分RecycleView可能会使用到的方法,当中也包含了一些用来增强HeaderRecyc ...
- Android之RecyclerView轻松实现下拉刷新和加载更多
今天研究了下RecyclerView的滑动事件,特别是下拉刷新和加载更多事件,在现在几乎所有的APP显示数据列表时都用到了.自定义RecyclerView下拉刷新和加载更多听上去很复杂,实际上并不难, ...
- Android -- RecyclerView实现顶部吸附效果
1,先来看一下今天实现的效果: 2,这次的效果是使用ItemDecoration来实践的,来看一看我们的实现吧 第一步:首先添加依赖,由于我们这些数据是请求网络的,所以一下我们添加网络框架依赖.Rec ...
- RecyclerView的Item的单击事件
RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下: ...
- Android开发——RecyclerView特性以及基本使用方法(一)
)关于点击事件,没有像ListView那样现成的API,但是自己封装起来也不难,而且我们使用ListView时,如果item中有可点击组件,那么点击事件的冲突也是一个问题,而在RecyclerView ...
- [Module] 03 - Software Design and Architecture
本篇涉及内容: ORM框架(无需再用contentprovider或者sqlitedatebasehelper之类的古董工具了) 规划各种业务Bean文件(配合ORM框架) 设计一个好的请求基类(Ba ...
- Box(视图组件)如何在多个页面不同视觉规范下的复用
本文来自 网易云社区 . 问题描述 Android App中的页面元素,都是由一个个Box(可以理解成一个个自定义View组件和Widget同级)组成,这些Box可以在不同的页面.不同的模块达到复用的 ...
随机推荐
- tarnado源码解析系列一
目录 tarnado tarnado源码安装 tarnado测试程序 application类的解析 一. tarnado简介 最近在学习Python,无意间接触到的tarnado,感觉tarnado ...
- python2.7练习小例子(二十六)
26):题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. 程序分析:学会分解出每一位数. 程序源代码: #!/usr/bin/python # ...
- 初步学习pg_control文件之八
接前文 初步学习pg_control文件之七 继续 看:catalog_version_no 代码如下: static void WriteControlFile(void) { ... /* * ...
- OpenCV代码提取: threshold函数的实现
threshold algorithm: The simplest image segmentation method. All thresholding algorithms take a sour ...
- Java:详解内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...
- 玩转Node.js(四)-搭建简单的聊天室
玩转Node.js(四)-搭建简单的聊天室 Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制.我便看了一 ...
- js学习日记-隐式转换相关的坑及知识
隐式转换比较是js中绕不过去的坎,就算有几年经验的工程师也很有可能对这块知识不够熟悉.就算你知道使用===比较从而避免踩坑,但是团队其它成员不一定知道有这样或那样的坑,有后端语言经验的人常常会形成一个 ...
- 在Linux上进行mySql安装部署及遇到的问题的解决方法
前提: Linux centOS虚拟机64位 1.首先确认是否已安装过MySQL 方法一:删除原有的MySQL目录: 使用查找语句: whereis mysql find / -name mysql ...
- 学习人工智能的第六个月[深度学习[Deep Learning,DL]]
这个月阅读了论文[Partial Adversarial Domain Adaptation-eccv18],文章着眼于源域标签空间包含目标域标签空间的场景,在域对抗神经网络的基础上提出了部分对抗域适 ...
- J2EE开发实战基础系列之开卷有益
2014.10.24[致歉]{抱歉,从7.4号接到朋友的请求,一直忙到现在,最近又有新的CASE要忙,很抱歉教程要延误,开课时间请大家关注Q群} 时隔七年再次接触培训有关的事情,是兴奋,更多的是恐惧, ...