Search code examples
javaandroidonclicklistenerrecyclerview-layout

OnClickListener in RecyclerView (ImageView)


I am trying to do this. In the CardView of a RecyclerView, if you tap on the image, a new activity must open with a bigger version of the image. Like tapping on the image of the profile pic of Whatsapp.

So a I thought I will do it with a OnClicklisterner on the Image.
I get this error message while running it: error: incompatible types: cannot be converted to Activity Some help would really be appreciated, I am still new to Android and Java, and I am a bit stuck. Here is the code I've tried so far:

         @Override
public void onBindViewHolder(final MyViewTwoHolder holder, int position) {
    holder.tvBrand.setText((CharSequence) modelTwoArrayList.get(position).getBrand());
    holder.tvImage.setImageResource(Integer.parseInt(String.valueOf(modelTwoArrayList.get(position).getImage())));
    holder.tvImage.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, modelTwoArrayList.get(position).getImage());
        Intent i = new Intent(view.getContext(), DetailsActivity.class);
        view.getContext().startActivity(i, options.toBundle());

        }
    });

The position in this line gives me the problem:

     ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, modelTwoArrayList.get(position).getImage());

Thank you for your time in advance.

My code now:

        @Override
public void onBindViewHolder(final MyViewTwoHolder holder, int position) {
    holder.tvBrand.setText((CharSequence) modelTwoArrayList.get(position).getBrand());
    holder.tvImage.setImageResource(Integer.parseInt(String.valueOf(modelTwoArrayList.get(position).getImage())));
    holder.tvImage.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation((Activity) ctx, holder.tvImage, "imageAnimation");
        Intent i = new Intent(ctx, DetailsActivity.class);
        i.putExtra("image_url", String.valueOf(holder.tvImage));
        ctx.startActivity(i, options.toBundle());

        }
    });

And my DetailsActivity:

   public class DetailsActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.details_activity);
    getIncomingIntent();
}

private void getIncomingIntent(){
String imageUrl = getIntent().getStringExtra("imageAnimation");
    setImage(imageUrl);
    }

private void setImage(String imageUrl){
    ImageView image = findViewById(R.id.beer_logo);

}}

Solution

  • 1) Make sure that your first parameter this is reference of Activity.

    2) Make sure that your second parameter modelTwoArrayList.get(position).getImage() is ImageView of list. It seems that this is not so. It must be like this holder.tvImage

    3) Provide third string parameter "imageAnimation"

    All in all your code will be look something like this

    ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MyActivity.this, holder.tvImage, "imageAnimation");
    Intent i = new Intent(MyActivity.this, DetailsActivity.class);
    MyActivity.this.startActivity(i, options.toBundle());