我有一个列表(小说列表),需要在回收器视图上显示,我正在为列表中的每个项目实现一个事件侦听器,每个小说列表都包含书籍。我想在单击项目时在单独的活动(DetailActivity)中显示图书详细信息。
是否应该制作另一个适配器?请帮帮我
我坚持添加嵌套的数组列表,因为我有ItemAdapter
,它有一个构造函数,它只接受一个小说列表,而列表不包含任何书籍。
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;
}
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);
}
}
发布于 2019-08-27 22:40:51
你能做的就是
1.更改模型类
Novelist.java
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
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
@Override
public onItemClickCallback(Novelist novelist){
Intent intent = new Intent(getBaseContext(), DetailActivity.class);
intent.putExtra("books", novelist.books);
startActivity(intent);
}
DetailActivity.java
private ArrayList<Book> books;
private BookItemAdapter bookItemAdapter;
@Override
public void onCreate(Bundle savedInstanceState){
...
books = getIntent("books");
bookItemAdapter = BookItemAdapter(books)
...
}
Improvements
将 onCreateViewHolder
中的点击侦听器设置为最佳实践。( Read here )
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);
}
发布于 2019-08-28 06:05:43
user158有一个很好的答案。
简而言之,是的,您需要创建一个新的Books Adapter来处理从当前小说家项目中获得的图书列表。因此,在单击您的项目之后,启动DetailsActivity并传递带有意图的图书列表。然后创建一个新的books Recycler和一个新的Books Adapter,并传入图书列表。
希望你能把它弄清楚!
https://stackoverflow.com/questions/57667592
复制相似问题