android 适配器接口,RecyclerView在适配器里使用接口将实现交给界面或者用户来处理...
发布日期:2022-02-21 12:50:40 浏览次数:36 分类:技术文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:html背景图渐变自动切换,html – 在背景图像上使用CSS渐变
下一篇:html下拉列表初始状态,HTML选择:如何设置不会在下拉列表中显示的默认文本?...

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月27日 08时17分57秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章