[英]RecyclerView not calling onCreateViewHolder or onBindView
[英]RecyclerView onCreateViewHolder method not calling
以下是我的ShelflifeAdapter
和HomeFragment
類:-
public class HomeFragment extends Fragment {
RecyclerView shelflifeRecyclerview;
ShelflifeAdapter shelflifeAdapter;
Product product;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_home, container, false);
shelflifeRecyclerview = rootView.findViewById(R.id.shelflifeRecyclerview);
shelflifeAdapter = new ShelflifeAdapter(getContext());
shelflifeRecyclerview.setAdapter(shelflifeAdapter);
shelflifeRecyclerview.setLayoutManager(new LinearLayoutManager(getContext()));
shelflifeRecyclerview.setHasFixedSize(true);
//fragment->fragment 데이터받기
Bundle bundle = getArguments(); //번들 받기
if(bundle != null){
product = new Product();
product = (Product) bundle.getSerializable("bundle");
shelflifeAdapter.addItem(product);
Log.d("TAG", shelflifeAdapter.getItemCount() +" 갯수");
}
return rootView;
}
}
public class ShelflifeAdapter extends RecyclerView.Adapter<ShelflifeAdapter.ViewHolder>{
ArrayList<Product> items = new ArrayList<Product>();
Context mContext;
ShelflifeAdapter(Context context){
mContext = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Log.d("TAG","onCreateViewHolder 작동함");
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView = inflater.inflate(R.layout.layout_shelflife,parent,false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
Log.d("TAG","onBindViewHolder 작동함");
Product item = items.get(position);
viewHolder.setItem(item,mContext);
}
@Override
public int getItemCount() {
return items.size();
}
public void addItem(Product item){
if(item != null){
Log.d("TAG","addItem 작동함(item 추가) : " + item.toString());
items.add(item);
notifyDataSetChanged();
}else{
Log.d("TAG","addItem 작동함(item 못가져옴)");
}
}
public void setItems(ArrayList<Product> items){
this.items = items;
}
public Product getItem(int position){
return items.get(position);
}
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView tv_shelflife;
LinearLayout itemContainer;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
tv_shelflife = itemView.findViewById(R.id.tv_shelflife);
itemContainer = itemView.findViewById(R.id.itemContainer);
}
public void setItem(Product item, Context context){
if(item != null){
Log.d("TAG","어댑터의 item : "+ item.toString());
if(item.getImage()==null){
Glide.with(itemView).load(R.drawable.no_image).override(48,48).into(imageView);
}else{
Glide.with(itemView).load(item.image).override(48,48).into(imageView);
}
tv_shelflife.setText(item.shelflifeDate);
}else{
Log.d("TAG","item이 null임" );
}
}
}
}
addItem(Product item)
運行良好但onCreateViewHolder
方法不起作用。 任何幫助表示贊賞!
首先初始化回收器視圖,然后為回收器視圖設置適配器。
shelflifeAdapter = new ShelflifeAdapter(getContext());
shelflifeRecyclerview.setLayoutManager(new LinearLayoutManager(getContext()));
shelflifeRecyclerview.setHasFixedSize(true);
//Always set adapter after setLayoutManager, setHasFixedSize
shelflifeRecyclerview.setAdapter(shelflifeAdapter);
Bundle bundle = getArguments(); //번들 받기
if(bundle != null){
product = new Product();
product = (Product) bundle.getSerializable("bundle");
shelflifeAdapter.addItem(product);
Log.d("TAG", shelflifeAdapter.getItemCount() +" 갯수");
}
並確保項目不是 null
Product item = items.get(position);
if(item!=null)
viewHolder.setItem(item,mContext);
將上下文傳遞給滑行
if(item.getImage()==null){
Glide.with(context).load(R.drawable.no_image).override(48,48).into(imageView);
}else{
Glide.with(context).load(item.image).override(48,48).into(imageView);
}
tv_shelflife.setText(item.shelflifeDate);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.