首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >传递数据,意图在单击recyclerview项目时显示在另一个活动中

传递数据,意图在单击recyclerview项目时显示在另一个活动中
EN

Stack Overflow用户
提问于 2019-08-27 12:12:05
回答 2查看 59关注 0票数 0

我有一个列表(小说列表),需要在回收器视图上显示,我正在为列表中的每个项目实现一个事件侦听器,每个小说列表都包含书籍。我想在单击项目时在单独的活动(DetailActivity)中显示图书详细信息。

是否应该制作另一个适配器?请帮帮我

我坚持添加嵌套的数组列表,因为我有ItemAdapter,它有一个构造函数,它只接受一个小说列表,而列表不包含任何书籍。

代码语言:javascript
运行
复制
    private ArrayList<Pemodelan_Item> dataNovelist() {

        ArrayList<Pemodelan_Item> list = new ArrayList<>();
        list.add(new Pemodelan_Item("Fiersa Besari.", "Bandung", R.drawable.fiersa, R.drawable.bandung_3, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("Ahmad Fuadi", "Sumatra Barat", R.drawable.ahmad, R.drawable.sumbar_2, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("Pidi Baiq", "Bandung", R.drawable.pidi, R.drawable.bandung_2, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("Andrea Hirata", "Belitung", R.drawable.andrea, R.drawable.belitung, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("Tere Liye", "Makasar", R.drawable.tereliye, R.drawable.makasar, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("Dee Lestari", "Bandung", R.drawable.dee, R.drawable.bandung, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("Boy Candra", "Sumatra Barat", R.drawable.boycandra, R.drawable.sumbar, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("Pramoedya Ananta Toer", "Jakarta", R.drawable.toer, R.drawable.jkt, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("Erisca Febriani", "Lampung", R.drawable.erisca, R.drawable.lampung, R.string.long_desc_andrea));
        list.add(new Pemodelan_Item("habiburrahman el shirazy", "Semarang", R.drawable.habiburahman, R.drawable.semarang, R.string.long_desc_andrea));
        return list;
    }
代码语言:javascript
运行
复制
package com.example.submission_novelist;


import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> {

    private ArrayList<Pemodelan_Item> novelists;
    private Context mContext;
    private OnItemClickCallback onItemClickCallback;

    public void setOnItemClickCallback(OnItemClickCallback onItemClickCallback){
        this.onItemClickCallback = onItemClickCallback;
    }

    public ItemAdapter(Context context, ArrayList<Pemodelan_Item> novelistss) {
        this.novelists = novelistss;
        mContext = context;
    }


    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_layout, viewGroup, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(final ViewHolder viewHolder, int i) {
        Pemodelan_Item pemodelan_item = novelists.get(i);
        viewHolder.tvNovelist.setText(pemodelan_item.getmNovelist());
        viewHolder.tvAsal.setText(pemodelan_item.getmAsal());
        viewHolder.ivNovelist.setImageResource(pemodelan_item.getmImgNovelist());
        viewHolder.ivCardBack.setImageResource(pemodelan_item.getmImgCardBackground());
        viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                Toast.makeText(viewHolder.cardView.getContext(), "saya" + novelists.get(viewHolder.getAdapterPosition()).getmNovelist(), Toast.LENGTH_SHORT).show();
           onItemClickCallback.onItemClicked(novelists.get(viewHolder.getAdapterPosition()));
            }
        });
    }

    @Override
    public int getItemCount() {
        if (novelists != null) {
            return novelists.size();
        } else {
            return 0;
        }
    }


    public class ViewHolder extends RecyclerView.ViewHolder {
        public View v;
        public TextView tvNovelist;
        public TextView tvAsal;
        public ImageView ivNovelist;
        public ImageView ivCardBack;
        public CardView cardView;

        public ViewHolder(View itemView) {
            super(itemView);
            this.v = itemView;
            tvNovelist = v.findViewById(R.id.novelist_text_view);
            tvAsal = v.findViewById(R.id.asal_text_view);
            ivNovelist = v.findViewById(R.id.novelist_image_view);
            ivCardBack = v.findViewById(R.id.cardViewBackground);
            cardView = v.findViewById(R.id.myCardView);

        }
    }

    public interface OnItemClickCallback{
        void onItemClicked(Pemodelan_Item pemodelan_item);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-08-27 22:40:51

你能做的就是

1.更改模型类

Novelist.java

代码语言:javascript
运行
复制
public class Novelist {

   private String writerName;
   private int writerImage;
   private String city;
   private int cityImage;
   private String description;
   private ArrayList<Book> books;

   public Novelist(String writerName, int writerImage, String city, int cityImage, String description, ArrayList<Book> books){

        this.writerName = writerName;
        this.writerImage = writerImage;
        this.city = city;
        this.cityImage = cityImage;
        this.description = description;
        this.books = books;
   }
   // property setters, getters here    
}

Book.java

代码语言:javascript
运行
复制
public class Book{
     private String bookTitle;
     private int bookImage;
     private String description;
     private double price;

     public Book(String bookTitle, int bookImage, String description, double price){
          this.bookTitle = bookTitle;
          this.bookImage = bookImage;
          this.description = description;
          this.price = price;
     }
     // property setters, getters here
}

2.如果您有大量的项目(对性能有好处),那么在DetailActivity中拥有一个回收器视图是很好的,所以您需要另一个适配器类(例如: BookItemAdapter)。

3.通过意图传递图书

MainActivity.java

代码语言:javascript
运行
复制
@Override
public onItemClickCallback(Novelist novelist){

    Intent intent = new Intent(getBaseContext(), DetailActivity.class);
    intent.putExtra("books", novelist.books);
    startActivity(intent);
}

DetailActivity.java

代码语言:javascript
运行
复制
private ArrayList<Book> books;
private BookItemAdapter bookItemAdapter;

@Override
public void onCreate(Bundle savedInstanceState){
    ...
    books = getIntent("books");
    bookItemAdapter = BookItemAdapter(books)
    ...
}

Improvements

onCreateViewHolder 中的点击侦听器设置为最佳实践。( Read here )

代码语言:javascript
运行
复制
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i){

     View view = LayoutInflater.from(viewGroup.getContext());

     view.setOnClickListener(new View.OnClickListener(){

     @Override
     public void onClick(View v){
         onItemOnClickCallback.onItemClicked(novelists.get(holder.getAdapterPosition()));
     }
  });

     ViewHolder holder =  ViewHolder(view);
}
票数 0
EN

Stack Overflow用户

发布于 2019-08-28 06:05:43

user158有一个很好的答案。

简而言之,是的,您需要创建一个新的Books Adapter来处理从当前小说家项目中获得的图书列表。因此,在单击您的项目之后,启动DetailsActivity并传递带有意图的图书列表。然后创建一个新的books Recycler和一个新的Books Adapter,并传入图书列表。

希望你能把它弄清楚!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57667592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档