[英]How to handle click event in RecyclerView
我知道这个问题已被问过100次,但我找不到与我的问题相关的任何答案,因为我是新手,而且他们的代码完全不同。 当单击图像时,我正在将Firebase
的图像显示到RecyclerView
,它必须像弹出窗口或Activity
一样打开图像。
quote.java
public class quote extends AppCompatActivity {
RecyclerView mRecyclerView;
FirebaseDatabase mFirebaseDatabase;
DatabaseReference mRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quote);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Post List");
int noc =2;
mRecyclerView=findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new GridLayoutManager(this,noc));
mFirebaseDatabase=FirebaseDatabase.getInstance();
mRef=mFirebaseDatabase.getReference("Data");
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Model,ViewHolder> firebaseRecyclerAdapter=
new FirebaseRecyclerAdapter<Model, ViewHolder>(Model.class,R.layout.row,ViewHolder.class,mRef) {
@Override
protected void populateViewHolder(ViewHolder viewHolder, Model model, int position) {
viewHolder.setDetails(model.getTitle(), model.getImage());
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(quote.this,"hello",Toast.LENGTH_LONG).show();
}
});
}
};
mRecyclerView.setAdapter(firebaseRecyclerAdapter);
}
}
模型
public class Model {
String title,image;
public Model(){}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
ViewHolder.java
public class ViewHolder extends RecyclerView.ViewHolder {
View mView;
public ViewHolder( View itemView) {
super(itemView);
mView = itemView;
}
public void setDetails(String title, String image){
TextView mTitleTv = mView.findViewById(R.id.rTitleTv);
ImageView mImageTv = mView.findViewById(R.id.rImageView);
mTitleTv.setText(title);
Picasso.get().load(image).into(mImageTv);
}
}
您需要使用itemView。
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(quote.this,"hello",Toast.LENGTH_LONG).show();
}
});
ViewHolder.ImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
itemListener.recyclerViewListClicked(view, position);
}
});
在设置/调用Adapter和OnBindviewHolder时,从片段或活动将接口上下文或回调发送到适配器构造函数,将数据设置为接口功能,并在活动或片段中实现这些功能以在单击时访问数据
如果您想查看图像放大,向下滑动/向上滑动的情况,可以使用支持库,例如Facebook的 Fresco ,此处是实施指南: https : //frescolib.org/docs/index.html ,也可以使用一些Fresco包装器例如,使使用Fresco更加容易: https : //github.com/stfalcon-studio/FrescoImageViewer
因此,通过使用Fresco,您可以这样做,图像将以全屏或自定义尺寸显示:
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri uri = Uri.parse("image url here");
draweeView.setImageURI(uri);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.