DEXTOR_ANTONY
DEXTOR_ANTONY

Reputation: 320

How to handle click event in RecyclerView

I know this question has been asked a 100 times, but I couldn't find any answers related to my issue because I'm new and their code is completely different. I'm displaying images from Firebase into RecyclerView when the images clicked it must open the image like a pop-up or in an 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);
 }
}

Model.java

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);
  }
}

Upvotes: 0

Views: 716

Answers (4)

Muhammad Haroon
Muhammad Haroon

Reputation: 210

  ViewHolder.ImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                itemListener.recyclerViewListClicked(view, position);
            }
        });

Send Interface context or callback to Adapter Constructor from your Fragment or Activity While Setting/Calling Adapter and OnBindviewHolder Set Data to Interface function and implements those function in Activity or Fragment to access data on Click

Upvotes: 2

Yupi
Yupi

Reputation: 4470

If you want to see image enlarged, dismiss on swipe down/up you can use supporting libraries like Fresco from Facebook here is the implementation guide: https://frescolib.org/docs/index.html or you could use some Fresco wrappers which make easier to use Fresco for example: https://github.com/stfalcon-studio/FrescoImageViewer

So by using Fresco you could do like this, image will appear in full screen or customised size:

viewHolder.itemView.setOnClickListener(new View.OnClickListener() {                
  @Override
  public void onClick(View v) {
      Uri uri = Uri.parse("image url here");
      draweeView.setImageURI(uri);
   }
});

Upvotes: 1

Andre Bahtiar Fauzi
Andre Bahtiar Fauzi

Reputation: 126

mImageTv.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                // Do open image zoom activity
                            }
                        });

you can use this library as an activity to zoom your ImageView. for smooth transition use this guide for transition animation

Upvotes: 1

Ticherhaz FreePalestine
Ticherhaz FreePalestine

Reputation: 2377

You need to use itemView.

viewHolder.itemView.setOnClickListener(new View.OnClickListener() {                
      @Override
      public void onClick(View v) {
          Toast.makeText(quote.this,"hello",Toast.LENGTH_LONG).show();
      }
});

Upvotes: 2

Related Questions