Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击片段上RecyclerView的适配器项目(照片)时显示ImageView_Android_Android Recyclerview_Nullpointerexception_Adapter_Android Viewholder - Fatal编程技术网

Android 单击片段上RecyclerView的适配器项目(照片)时显示ImageView

Android 单击片段上RecyclerView的适配器项目(照片)时显示ImageView,android,android-recyclerview,nullpointerexception,adapter,android-viewholder,Android,Android Recyclerview,Nullpointerexception,Adapter,Android Viewholder,我有一个问题,我读到它,我不能在OnBindViewHolder上这样做,但我在其他网站上使用它,总是相同的错误。。。 在我出错后,我也使用长时间单击来做一件事,它工作正常,但在此之前,我想使用时钟正常,不长,因为当我单击时,会显示带有图像的alertbox(我也尝试使用imageview正常来做这件事,而不使用alertbox) 但没什么,同样的错误 我想用它拍摄一张recyclerview的照片,然后从目录中打开它并在alertbox中“放大”… 代码 alertbox是一个只有一个图像的布

我有一个问题,我读到它,我不能在OnBindViewHolder上这样做,但我在其他网站上使用它,总是相同的错误。。。 在我出错后,我也使用长时间单击来做一件事,它工作正常,但在此之前,我想使用时钟正常,不长,因为当我单击时,会显示带有图像的alertbox(我也尝试使用imageview正常来做这件事,而不使用alertbox) 但没什么,同样的错误

我想用它拍摄一张recyclerview的照片,然后从目录中打开它并在alertbox中“放大”…

代码

alertbox是一个只有一个图像的布局,我用android:src和可绘制图像对它进行了测试,我点击它,它就工作了。。。 谢谢你们,我用这个xD浪费了很多时间删除这行

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成功我的应用程序,但我明白这是如何工作的。。。感谢您抽出时间:)