
本文共 3828 字,大约阅读时间需要 12 分钟。
适配器代码package com.annyou.study.myrecyclerviewdemo;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import org.w3c.dom.Text;
import java.util.ArrayList;
/**
* RecyclerView的适配器处理类
*/
public class MyRecycleAdapter extends RecyclerView.Adapter {
private final Context context;
//注意由于数据是可变化的,所以去掉final
private ArrayList arrData;
/**
* 创建一个默认的构造器
* context:是上下文
* arrData:用于绑定于视图的数组
*/
public MyRecycleAdapter(Context context, ArrayList arrData){
this.context = context;
this.arrData = arrData;
}
/**
* 创建视图容器
* @param viewGroup
* @param i
* @return
*/
@NonNull
@Override
public MyViewHodler onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
//这里根据视图得到ViewHolder容器
View itemView = View.inflate(context,R.layout.myadapterview,null);
return new MyViewHodler(itemView);
}
/**
* 绑定数据
* @param myViewHodler
* @param i 表示是数组中第几个数据
*/
@Override
public void onBindViewHolder(@NonNull MyViewHodler myViewHodler, int i) {
//
String curData = arrData.get(i);
//对容器对应的控件进行设置.
//myViewHodler
myViewHodler.tv_Title.setText(curData);
//将数组的指定索引的内容显示到当前的item中。
}
/**
* 返回当前适配器中有多少个Item
* @return
*/
@Override
public int getItemCount() {
//数组的个数就是item的个数
return arrData.size();
}
//定义内部类
class MyViewHodler extends RecyclerView.ViewHolder{
private TextView tv_Title;
/**
* 视图处理类
* @param itemView
*/
public MyViewHodler(@NonNull View itemView) {
super(itemView);
tv_Title = itemView.findViewById(R.id.tv_title);
/* 方法1
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//得到当前点击的项目索引
int curIndex = getLayoutPosition();
//得到当前索引的值
String curData = arrData.get(curIndex);
Toast.makeText(context,"当前的值是:" + curData,Toast.LENGTH_LONG).show();
}
});
*/
/*
* 使用接口的方式将实现放至外面.
* */
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(myRecycleAdapterItemClick != null){
String curData = arrData.get(getLayoutPosition());
myRecycleAdapterItemClick.SetItemClick(v,curData);
}
}
});
}
}
/**
* 用于对外的接口
*/
public interface IMyRecycleAdapterItemClick{
public void SetItemClick(View v, String curData);
}
private IMyRecycleAdapterItemClick myRecycleAdapterItemClick;
/**
* 将外部的接口实现传递进来
* @param myRecycleAdapterItemClick
*/
public void SetMyRecycleAdapterItemClick(IMyRecycleAdapterItemClick myRecycleAdapterItemClick){
this.myRecycleAdapterItemClick = myRecycleAdapterItemClick;
}
}
前端调用代码RecyclerViewOne = (RecyclerView)findViewById(R.id.RecyclerViewOne);
//实例化一个适配器
MyRecycleAdapter adapter = new MyRecycleAdapter(MainActivity.this,arrData);
//将适配器与当前RecyclerView进行绑定
RecyclerViewOne.setAdapter(adapter);
//设置当前的RecyclerView为List风格
// MainActivity.this 为当前的上下文
//LinearLayoutManager.VERTICAL 表示是上下的一个List,如果是HORIZONTAL表示是水平的滑动
RecyclerViewOne.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));
//使用接口将处理的方式,抛给用户来处理
adapter.SetMyRecycleAdapterItemClick(new MyRecycleAdapter.IMyRecycleAdapterItemClick(){
@Override
public void SetItemClick(View v, String curData) {
Toast.makeText(MainActivity.this,"当前的数据是:" +curData,Toast.LENGTH_LONG).show();
}
});
说明:
使用接口的方式,可以将最终的处理权交给用户,使耦合度降低。
在适配器增加一个内部接口,将内部接口作为一个类型,采用一个公用方法将实现前置到用户端
其他事件可以同样使用新的接口来实现,这一思想可以用于其他自定义的控件中。
使用方法一设置处理方法,不低于公用组件的复用。如下方法public MyViewHodler(@NonNull View itemView) {
super(itemView);
tv_Title = itemView.findViewById(R.id.tv_title);
/* 方法1
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//得到当前点击的项目索引
int curIndex = getLayoutPosition();
//得到当前索引的值
String curData = arrData.get(curIndex);
Toast.makeText(context,"当前的值是:" + curData,Toast.LENGTH_LONG).show();
}
});
*/
完整代码:
当前代码增加一个元素,删除一个元素,以及获取当前元素的扩展方法。
转载地址:https://blog.csdn.net/weixin_33958381/article/details/117659348 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关于作者
