RecyclerView (ImageView) 中的 OnClickListener
OnClickListener in RecyclerView (ImageView)
我正在尝试这样做。在 RecyclerView 的 CardView 中,如果您点击图像,则必须打开一个新的 activity,其中包含更大版本的图像。就像点击 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());
}
});
还有我的详细信息Activity:
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);
}}
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());
您遇到问题是因为 ActivityOptions.makeSceneTransitionAnimation
需要一个 Activity
但是当您这样做时 this
您给了它您的适配器。
要解决此问题,请更改适配器的构造函数以采用 activity in
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());
我正在尝试这样做。在 RecyclerView 的 CardView 中,如果您点击图像,则必须打开一个新的 activity,其中包含更大版本的图像。就像点击 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());
}
});
还有我的详细信息Activity:
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);
}}
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());
您遇到问题是因为 ActivityOptions.makeSceneTransitionAnimation
需要一个 Activity
但是当您这样做时 this
您给了它您的适配器。
要解决此问题,请更改适配器的构造函数以采用 activity in
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());