如何使用RecyclerView显示数据库中的数据
答案:2 悬赏:70 手机版
解决时间 2021-01-30 03:48
- 提问者网友:佞臣
- 2021-01-29 20:22
如何使用RecyclerView显示数据库中的数据
最佳答案
- 五星知识达人网友:梦中风几里
- 2021-01-29 20:36
思路是:因为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的代码:
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;
}
全部回答
- 1楼网友:狂恋
- 2021-01-29 21:04
思路是:因为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>: 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传递进来
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯