繁体   English   中英

如何在RecyclerView中处理点击事件

[英]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);
   }
});
mImageTv.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                // Do open image zoom activity
                            }
                        });

您可以将此库用作一项活动来缩放ImageView。 为了平滑过渡,请使用指南进行过渡动画

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM