RecyclerView(ImageView)中的OnClickListener

时间:2018-07-16 20:06:08

标签: java android onclicklistener recyclerview-layout

我正在尝试这样做。在RecyclerView的CardView中,如果您点击图像,则必须打开具有较大图像版本的新活动。就像点击Whatsapp的个人资料图片的图像一样。

所以我想我会用图像上的OnClicklisterner来做的。
运行该错误消息: 错误:类型不兼容:无法转换为活动 我们将不胜感激一些帮助,因为我还是Android和Java的新手,我有点受阻。 这是到目前为止我尝试过的代码:

         @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());

        }
    });

此行中的位置给我带来了问题:

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

提前感谢您的时间。

现在我的代码:

        @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());

        }
    });

我的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);

}}

2 个答案:

答案 0 :(得分:2)

1)确保第一个参数this是Activity的引用。

2)确保第二个参数modelTwoArrayList.get(position).getImage()是list的ImageView。似乎并非如此。一定是这样的holder.tvImage

3)提供第三个字符串参数“ imageAnimation”

您的所有代码看起来都是这样

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

答案 1 :(得分:0)

您遇到了问题,因为ActivityOptions.makeSceneTransitionAnimation期望有一个Activity,但是当您执行this时,便是为其提供了适配器。

要解决该问题,请更改适配器的构造函数以接受活动

MyAdapter(Context context,Arg1,Arg2){
  this.myActivityContext = context;
  ... other stuffs
}

然后在“活动”中初始化适配器时

MyAdapter myAdapter = new MyAdapter(this,arg1,arg2)

然后

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