永发信息网

如何使用RecyclerView显示数据库中的数据

答案:2  悬赏:70  手机版
解决时间 2021-01-30 03:48
如何使用RecyclerView显示数据库中的数据
最佳答案
思路是:因为ViewHolder我们可以拿到每个Item的根布局,所以如果我们为根布局设置单独的OnClick监听并将其开放给Adapter,那不就可以在组装RecyclerView时就能够设置ItemClickListener,只不过这个Listener不是设置到RecyclerView上而是设置到Adapter。
我们首先看ViewHolder的代码:
public class MyViewHolder extends ViewHolder implements OnClickListener,OnLongClickListener{

public ImageView iv;
public TextView tv;
private MyItemClickListener mListener;
private MyItemLongClickListener mLongClickListener;

public MyViewHolder(View rootView,MyItemClickListener listener,MyItemLongClickListener longClickListener) {
super(rootView);
iv = (ImageView)rootView.findViewById(R.id.item_iv);
tv = (TextView)rootView.findViewById(R.id.item_tv);
this.mListener = listener;
this.mLongClickListener = longClickListener;
rootView.setOnClickListener(this);
rootView.setOnLongClickListener(this);
}


@Override
public void onClick(View v) {
if(mListener != null){
mListener.onItemClick(v,getPosition());
}
}


@Override
public boolean onLongClick(View arg0) {
if(mLongClickListener != null){
mLongClickListener.onItemLongClick(arg0, getPosition());
}
return true;
}

}

因为在构造ViewHolder时,rootView将作为一个必传参数传递进来,所以我们只需要拿到rootView并给其绑定点击监听事件即可。

下面要考虑的就是怎样把listener传递进来。Demo中设定了监听点击事件的Interface:MyItemClickListener:
public interface MyItemClickListener {
public void onItemClick(View view,int postion);
}

MyItemClickListener模仿ListView的OnItemClickListener,开放了view和position两个参数,这对习惯使用ListView的开发者们使用起来更得心应手。从ViewHolder的代码中可以看到,执行onClick方法时会调用getPosition()将当前Item的位置回调给listener。getPosition()是ViewHolder的内置方法,可直接使用。

上面提到过,listener是设定到Adapter上的,所以Adapter就需要对外开放相关方法:

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent,false);
MyViewHolder vh = new MyViewHolder(itemView,mItemClickListener,mItemLongClickListener);
return vh;
}


public void setOnItemClickListener(MyItemClickListener listener){
this.mItemClickListener = listener;
}

public void setOnItemLongClickListener(MyItemLongClickListener listener){
this.mItemLongClickListener = listener;
}
全部回答
思路是:因为viewholder我们可以拿到每个item的根布局,所以如果我们为根布局设置单独的onclick监听并将其开放给adapter,那不就可以在组装recyclerview时就能够设置itemclicklistener,只不过这个listener不是设置到recyclerview上而是设置到adapter。 我们首先看viewholder的代码: public class myviewholder extends viewholder implements onclicklistener,onlongclicklistener{ public imageview iv; public textview tv; private myitemclicklistener mlistener; private myitemlongclicklistener mlongclicklistener; public myviewholder(view rootview,myitemclicklistener listener,myitemlongclicklistener longclicklistener) { super(rootview); iv...id; public void setonitemclicklistener(myitemclicklistener listener){ this; } /,所以如果我们为根布局设置单独的onclick监听并将其开放给adapter; 因为在构造viewholder时; } return true,这对习惯使用listview的开发者们使用起来更得心应手.getcontext()); myviewholder vh = new myviewholder(itemview; this;** * 设置item点击监听 * @param listener */: @override public myviewholder oncreateviewholder(viewgroup parent,false),执行onclick方法时会调用getposition()将当前item的位置回调给listener,所以我们只需要拿到rootview并给其绑定点击监听事件即可; } public void setonitemlongclicklistener(myitemlongclicklistener listener){ this,开放了view和position两个参数。 上面提到过; } /,可直接使用,getposition()),myitemlongclicklistener longclicklistener) { super(rootview).item_iv).setonclicklistener(this);/思路是!= null){ mlongclicklistener.onitemlongclick(arg0, parent; public textview tv; } } /.id.from(parent.item。从viewholder的代码中可以看到,rootview将作为一个必传参数传递进来, int viewtype) { view itemview = layoutinflater; iv = (imageview)rootview;** * 长按监听 */.layout; private myitemclicklistener mlistener: public interface myitemclicklistener { public void onitemclick(view view,那不就可以在组装recyclerview时就能够设置itemclicklistener.mlongclicklistener = longclicklistener:myitemclicklistener,listener是设定到adapter上的.item_tv); public myviewholder(view rootview.findviewbyid(r; tv = (textview)rootview.inflate(r; @override public void onclick(view v) { if(mlistener ;** * 点击监听 */,所以adapter就需要对外开放相关方法.mitemclicklistener = listener。 我们首先看viewholder的代码.findviewbyid(r, getposition()); } myitemclicklistener模仿listview的onitemclicklistener.mlistener = listener!= null){ mlistener,int postion).setonlongclicklistener(this)。demo中设定了监听点击事件的interface; } }< this.onitemclick(v; return vh;span&gt: public class myviewholder extends viewholder implements onclicklistener,只不过这个listener不是设置到recyclerview上而是设置到adapter; @override public boolean onlongclick(view arg0) { if(mlongclicklistener ; rootview; rootview,mitemclicklistener,mitemlongclicklistener); private myitemlongclicklistener mlongclicklistener:因为viewholder我们可以拿到每个item的根布局.mitemlongclicklistener = listener,myitemclicklistener listener,onlongclicklistener{ public imageview iv。getposition()是viewholder的内置方法。 下面要考虑的就是怎样把listener传递进来
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中通快递(东大街与古城路交叉口北50米中国邮
可爱宝贝儿童摄影(向阳大道148号附近可爱宝贝
《放鸭姑娘》的歌词
以洗胃方式解救毒物中毒为首要措施,洗胃液每
身边的人都说我长得挺好看的为什么没人追啊?
漫映像摄影工作室地址在什么地方,想过去办事
求没有修真和武功内容的奇幻小说!!要大陆作
百率的意思是什么啊?知道的请说下!
我老公死了妹妹离了婚的妹妹从我家出嫁好吗
黑羽快斗的“斗”字到底是读第几声?
卡氏16种人格因素的次元人格因素包括()。A.怯
二手房个人所得税税率是多少
公安局治安管理包括什么
可爱宝贝孕婴童专业摄影(新建南路与步行街交
中通快递(龙泉路12-15)地址有知道的么?有点
推荐资讯
羊肉可以邮寄吗?
行政事业单位领导要做离任审计吗
踢键儿的意思是什么啊?知道的请说下!
我买的万能险,想退保交两年了,能退回多少钱
三尺律的意思是什么啊?知道的请说下!
贴衬的意思是什么啊?知道的请说下!
乐水茶室地址有知道的么?有点事想过去
老凤祥银楼(南召专卖店)怎么去啊,我要去那办
百度贴吧“江西专升本”吧怎么没有了?还说与
关于人类遗传病监测和预防,不正确的措施是A.
我男朋友跟我说他讨厌我对他说话的语气。那我
人总共有多少血
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?