【问题标题】:How to open new Activity on item click with different data and photo in RecyclerView如何在 RecyclerView 中使用不同的数据和照片打开项目点击的新活动
【发布时间】:2017-01-07 15:40:43
【问题描述】:

编辑 我(将 onClick 移至 onBindViewHolder 但仍然没有成功

我尝试使用 RecyclerView 制作应用程序,您可以在单击时看到项目的详细信息。所以你有一个带有照片及其标题的项目列表。当您点击它时,新屏幕会显示新/不同的照片、相同的标题和附加文本。 应用设计如图

我的适配器的代码是:

公共类 RecyclerAdapter 扩展 recyclerView.Adapter {

private String[] titles = {
        "Title A",
        "Title B",
        "Title C"};

private String[] description = {
        "Description A",
        "Description B",
        "Description C"};
   private int[] images = {
       R.drawable.picture A,
       R.drawable.picture B,
       R.drawable.picture C,};
 private int[] images2 = {
        R.drawable.picture A2,
        R.drawable.picture B2,
        R.drawable.picture C2,
};
class ViewHolder extends RecyclerView.ViewHolder{

    public ImageView itemImage;
    public ImageView itemImage2;
    public TextView itemTitle;
    public TextView itemTitle2;

    public ViewHolder(View itemView) {
        super(itemView);
        itemImage = (ImageView)itemView.findViewById(R.id.image_start);
        itemTitle = (TextView)itemView.findViewById(R.id.article_title);
//SecondActivity where different picture and decription should be displayed, but when I uncomment it the app crashes
   //itemTitle2 =(TextView)itemView.findViewById(R.id.article_ingredients);
//itemImage = (ImageView)itemView.findViewById(R.id.image_details);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {

                int position = getAdapterPosition();
                Intent intent = new Intent(v.getContext(), SecondActivity.class);

                intent.putExtra("title",itemTitle.getText().toString());
                intent.putExtra("description", itemTitle2.getText().toString()); //this one on makes app crash
                v.getContext().startActivity(intent);

                       }
        });
    }

}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.article_layout, viewGroup, false);
            ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    viewHolder.itemTitle.setText(titles[i]);
//  viewHolder.itemDetail.setText(details[i]);
    viewHolder.itemImage.setImageResource(images[i]);
   // viewHolder.itemTitle2.setText(titles2[i]);

}

@Override
public int getItemCount() {
    return titles.length;
}
}

我尝试了不同的选择,但没有结果。提前感谢您的帮助

【问题讨论】:

  • 你得到什么错误?
  • 在这种形式的应用程序工作,虽然不做我想做的事。当我取消注释时,我得到: FATAL EXCEPTION: main java.lang.NullPointerException at com.pl.mobinet.cookentials.RecyclerAdapter.onBindViewHolder(RecyclerAdapter.java:97) at com.pl.mobinet.cookentials.RecyclerAdapter.onBindViewHolder(RecyclerAdapter. java:15)

标签: android android-activity android-recyclerview


【解决方案1】:

您已将itemTitle2 =(TextView)itemView.findViewById(R.id.article_ingredients); 注释掉,当您尝试对其调用getText() 时,这可能会导致空指针异常。

取消注释该行,然后在您的 onBindViewHolder 中取消注释该行:viewHolder.itemTitle2.setText(titles2[i]);

如果您遇到新错误,请告诉我,并确保为我们提供堆栈跟踪。

【讨论】:

  • 在这种形式的应用程序工作,虽然不做我想做的事。当我取消注释时,我得到: FATAL EXCEPTION: main java.lang.NullPointerException at com.pl.mobinet.cookentials.RecyclerAdapter.onBindViewHolder(RecyclerAdapter.java:97) at com.pl.mobinet.cookentials.RecyclerAdapter.onBindViewHolder(RecyclerAdapter. java:15)
  • 您的应用程序将崩溃,因为您试图在空对象引用上调用 getText()。如果我的解决方案仍然导致应用程序因空指针异常而崩溃,请确保 R.id.article_ingredients 是名为 article_layout 的 XML 布局文件中的有效 ID。
猜你喜欢
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2020-02-10
  • 2021-11-02
相关资源
最近更新 更多