Android 单击片段上RecyclerView的适配器项目(照片)时显示ImageView
我有一个问题,我读到它,我不能在OnBindViewHolder上这样做,但我在其他网站上使用它,总是相同的错误。。。 在我出错后,我也使用长时间单击来做一件事,它工作正常,但在此之前,我想使用时钟正常,不长,因为当我单击时,会显示带有图像的alertbox(我也尝试使用imageview正常来做这件事,而不使用alertbox) 但没什么,同样的错误 我想用它拍摄一张recyclerview的照片,然后从目录中打开它并在alertbox中“放大”… 代码 alertbox是一个只有一个图像的布局,我用android:src和可绘制图像对它进行了测试,我点击它,它就工作了。。。 谢谢你们,我用这个xD浪费了很多时间删除这行Android 单击片段上RecyclerView的适配器项目(照片)时显示ImageView,android,android-recyclerview,nullpointerexception,adapter,android-viewholder,Android,Android Recyclerview,Nullpointerexception,Adapter,Android Viewholder,我有一个问题,我读到它,我不能在OnBindViewHolder上这样做,但我在其他网站上使用它,总是相同的错误。。。 在我出错后,我也使用长时间单击来做一件事,它工作正常,但在此之前,我想使用时钟正常,不长,因为当我单击时,会显示带有图像的alertbox(我也尝试使用imageview正常来做这件事,而不使用alertbox) 但没什么,同样的错误 我想用它拍摄一张recyclerview的照片,然后从目录中打开它并在alertbox中“放大”… 代码 alertbox是一个只有一个图像的布
image = viewHolder.view.findViewById(R.id.imagen);
当您使用setImageBitmap
时,可以像这样访问image
viewHolder.image.setImageBitmap(yourImage);
编辑:
在你的onBindViewHolder
中发生了很多事情,你在不同的地方放大了你的视图(findViewById
)。所有这些工作都应该转移到视图持有者
上,这样管理起来就容易多了
首先,这行代码有两次image=viewHolder.view.findViewById(R.id.imagen)代码>,您不需要这样做,只需要做一次,在ViewHolder
构造函数中做一次,就这样
还有这一行ImageView-mostrarImagen=(ImageView)viewHolder.view.findViewById(R.id.mostrarImagen2)代码>最好在ViewHolder
构造函数中,而不是在onBindViewHolder
中
然后,从您的ViewHolder
中删除View视图
,并从构造函数中删除这一行View=itemView代码>,不需要这样做
现在,您的ViewHolder
构造函数和声明应该如下所示:
public ImageButton image;
public ImageView mostrarImagen
public ViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.imagen);
mostrarImagen = itemView.findViewById(R.id.mostrarImagen2);
}
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener
当您在onBindViewHolder
中使用ImageButton
和ImageView
时,不要使用findViewById
只需使用viewHolder.image
和viewHolder.mostrarImagen
关于你的onClickListener
和onLongClickListener
,把它们放在你的ViewHolder
类中,会更干净。将这些行放在您的ViewHolder
构造函数中:
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
另外,确保您的ViewHolder
实现onClickListener
,如下所示:
public ImageButton image;
public ImageView mostrarImagen
public ViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.imagen);
mostrarImagen = itemView.findViewById(R.id.mostrarImagen2);
}
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener
然后在您的ViewHolder
类中覆盖onClickListener
和onlongclickllistener
:
@Override
public void onClick(View view) {
// your code
}
@Override
public boolean onLongClick(View view) {
// your code
return true;
}
可能重复的Nope,不是解决方案,是bad@Chuflitas稍后我会编辑我的答案,你有几个问题谢谢,回答得好最后,我不需要你的方法,我可以使用所有在onbind成功我的应用程序,但我明白这是如何工作的。。。感谢您抽出时间:)