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可以在不同的页面.不同的模块达到复用的 ...
随机推荐
- admin添加用户时报错:(1452, 'Cannot add or update a child row: a foreign key constraint fails (`mxonline`.`django_admin_l
在stackoverflow找到答案: DATABASES = { 'default': { ... 'OPTIONS': { "init_command": "SET ...
- (杭电 1097)A hard puzzle
A hard puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- .NET CORE LOG
.NET CORE LOG 合格的应用程序不仅要求运行的高效和计算的准确,稳定及可靠性也要得到满足,同事,系统的可维护性也相当重要.谈及到可维护性,就必须涉及到系统运行状态的监控和异常的快速定位与跟踪 ...
- windows下subversion服务器搭建
一.下载subversion服务器端和客户端软件 1.subversion下载地址:http://subversion.tigris.org/ 2.svn比较流行的客户端Tortoisesvn下载地址 ...
- HTML 特效标签
HTMl 文字移动<MARQUEE scrollAmount=2 scrollDelay=150 direction=up height=120> 内容 </marquee>s ...
- 解决上传app store卡在正在通过iTunes Store鉴定
打开终端输入代码即可 cd ~ mv .itmstransporter/ .old_itmstransporter/ "/Applications/Xcode.app/Contents/Ap ...
- MinGW安装图文教程以及如何配置C语音编程环境
MinGW安装图文教程以及如何配置C语音编程环境 转载自:http://www.jb51.net/softjc/192017.html MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序 ...
- Ubuntu下使用Git_5
还欠大家最后一篇Git的学习. Git的下一个内容,标签,标签是为了更方便的参考提交而给他表上通俗易懂的名称 Git可以使用两种标签,轻标签和注解标签,打上的标签是固定的,不能向分支那样可以移动位置, ...
- MySQL☞length函数
length(字符串/列名):求出该字符串/列名中字符的个数 格式: select length(列名) from 表名 如下图:
- Wordpress 从 MySQL 获取文章链接 permalinks
SELECT wpp.post_title, wpp.guid, wpp.post_date, REPLACE( REPLACE( REPLACE( REPLACE( wpo.option_value ...