【问题标题】:OnClickListener in RecyclerView (ImageView)RecyclerView (ImageView) 中的 OnClickListener
【发布时间】:2018-07-16 20:06:07
【问题描述】:

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

所以我想我会在图像上使用 OnClicklisterner。
我在运行它时收到此错误消息: 错误:不兼容的类型:无法转换为 Activity 一些帮助真的很感激,我对 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);

}}

【问题讨论】:

  • 试试这个ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(view.getContext(), holder.tvImage,"yourSharedElementName");

标签: java android onclicklistener recyclerview-layout


【解决方案1】:

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

2) 确保您的第二个参数modelTwoArrayList.get(position).getImage() 是列表的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());

【讨论】:

  • 谢谢,我这样更改了代码,现在我的新活动打开了,但我似乎仍然无法在 DetailsActivity 中显示图像。我现在应该问一个新问题,但也许你能看到一些东西。
【解决方案2】:

您遇到了问题,因为 ActivityOptions.makeSceneTransitionAnimation 期待的是 Activity,但是当您执行 this 时,您正在给它您的适配器。

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

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

然后当您在 Activity 中初始化适配器时

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

然后

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2021-03-23
    • 1970-01-01
    • 2021-10-24
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多