当前位置: 首页 > 知识库问答 >
问题:

在回收商视图项目上单击“在对话框中显示回收商查看自定义数据”

公羊晟
2023-03-14

我有一个关于我的活动的回收视图。当用户单击回收视图项目时,我想显示我的自定义对话框并将回收视图项目数据显示到对话框中,recylerview工作正常,但问题是当我单击该项目时,该应用程序不幸停止了一些错误

这是我的日志

进程:index=-1 at java.util.ArrayList.get(数组列表.java:310) 在 android.os.处理程序.处理程序.java.java:95) 在.java.java android.os.Looper.loop.(环行器.java:135) 在 android.os.处理html" target="_blank">程序.java:135) 在 android.os.处理程序.dispatch消息(.java:95) 在 android.os.Looper.looper.loop(环行器.java:135) 在 android.app.ActiveThread.main(活动线程.java:5254) 在 android.os.处理程序.java:5254) 在java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

再循环适配器代码

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {

private Context mContext ;
private List<Book> mData ;
Dialog myDialog;

public RecyclerViewAdapter(Context mContext, List<Book> mData) {
    this.mContext = mContext;
    this.mData = mData;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view ;
    LayoutInflater mInflater = LayoutInflater.from(mContext);
    view = mInflater.inflate(R.layout.my,parent,false);

    final MyViewHolder vHolder =new MyViewHolder(view);

  myDialog =new Dialog(mContext);
  myDialog.setContentView(R.layout.vx);

  vHolder.cardView.setOnClickListener(new View.OnClickListener() {
      @Override 
      public void onClick(View v) { 
          TextView dialog_name=(TextView)myDialog.findViewById(R.id.name);
          ImageView dialog_image=(ImageView)myDialog.findViewById(R.id.image);
          dialog_name.setText(mData.get(vHolder.getAdapterPosition()).getTitle());
          dialog_image.setImageResource(mData.get(vHolder.getAdapterPosition()).getThumbnail());
          myDialog.show(); }
          });
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    holder.tv_book_title.setText(mData.get(position).getTitle());
    holder.img_book_thumbnail.setImageResource(mData.get(position).getThumbnail());

}

@Override
public int getItemCount() {
    return mData.size();
}

public static class MyViewHolder extends RecyclerView.ViewHolder {

    TextView tv_book_title;
    ImageView img_book_thumbnail;
    CardView cardView ;

    public MyViewHolder(View itemView) {
        super(itemView);

        tv_book_title = (TextView) itemView.findViewById(R.id.name) ;
        img_book_thumbnail = (ImageView) itemView.findViewById(R.id.image);
        cardView = (CardView) itemView.findViewById(R.id.cv);


    }
}


}

共有3个答案

龚振
2023-03-14

数组索引超出边界异常 当您尝试访问超出边界的数组的索引(因此得名)时,会导致此异常。

@Ben提供了上述指数越界的原因。我认为他的解决方案应该在这里奏效。

林祯
2023-03-14

在代码中添加以下更改:

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view ;
LayoutInflater mInflater = LayoutInflater.from(mContext);
view = mInflater.inflate(R.layout.my,parent,false);

myDialog =new Dialog(mContext);
myDialog.setContentView(R.layout.vx);

return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

holder.tv_book_title.setText(mData.get(position).getTitle());
holder.img_book_thumbnail.setImageResource(mData.get(position).getThumbnail());
holder.cardView.setOnClickListener(new View.OnClickListener() {
  @Override 
  public void onClick(View v) { 
      TextView dialog_name=(TextView)myDialog.findViewById(R.id.name);
      ImageView dialog_image=(ImageView)myDialog.findViewById(R.id.image);
      dialog_name.setText(mData.get(vHolder.getAdapterPosition()).getTitle());
      dialog_image.setImageResource(mData.get(vHolder.getAdapterPosition()).getThumbnail());
      myDialog.show(); }
      });
}

希望这对你有帮助…!

闾丘树
2023-03-14

问题在您的onCreateViewHolder()方法的这一部分:

final MyViewHolder vHolder =new MyViewHolder(view);
...
vHolder.cardView.setOnClickListener(new View.OnClickListener() {
    @Override 
    public void onClick(View v) { 
        ...
    }
});
return new MyViewHolder(view);

您返回的MyViewHolder实例与创建OnClickListener时使用的实例不同。这意味着侦听器中的vHolder变量引用的是从未添加到RecyclView的ViewHolder,因此其位置将始终为-1

您可以通过将 return 语句更改为使用原始视图持有者来修复此问题:

return vHolder;
 类似资料:
  • 如果用户点击一个,我希望它做一些事情,也为两个和三个。我如何实现这一点?

  • 所以,这就是我的问题。我的recyclerview项目在底部有一个视图,我最初将其设置为消失。现在,当它们被点击时,我想让它们再次可见。所以在onClick方法中,我将视图设置为Visible。一切正常,但是当我向下滚动和向上滚动时,视图又隐藏了。我想这和取景模式有关。我想保持现状,即开放。我该怎么做?谢了。 视图支架: 点击: 编辑:上传的代码。此外,我尝试在onClick中更新Item的布尔值

  • 然后,在每个@test方法中,我调用activitytestrule.launchactivity(Intent.action_main)),然后进行单击。我发现,只有第一次点击不起作用,但第二次和第三次点击起作用。那么,这种行为的原因又能是什么呢?

  • 我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • FolderListAdapter代码 RecyclerView的Mainactive代码 回收器视图的XML代码 folderList的大小为2 我还检查了适配器的大小。它也是2,我不知道我在哪里犯了错误,为什么它现在在活动中什么都没有显示