Fisherman_Zhu
Fisherman_Zhu

Reputation: 119

RecycleView doesn't work in android fragement

I am writing a app which use a recycleView in fragement. However only the textView in that fragement show,there is nothing in the recycleView ,function like onBindViewHolder() in the recycleView Adapter wasn't been called .Here is my code of recycleViewAdapter and fragement.

Adapter

import java.util.List;
public class ShoppingAdapter extends RecyclerView.Adapter<ShoppingAdapter.MyViewHolder> {
    private List<Shopping> localData;

    public ShoppingAdapter(List<Shopping> localData) {
        this.localData = localData;
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder{

        TextView textView;
        ImageView imageView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView =itemView.findViewById(R.id.shopping_text);
            imageView = itemView.findViewById(R.id.shopping_img);
        }
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        Log.d("test", "onCreateViewHolder: ");
        View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.shopping_item,parent,false);
        return null;
    }



    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.textView.setText(localData.get(position).getTitle());
        holder.imageView.setImageResource(localData.get(position).getImageResource());
    }

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

Fragment

public class shoppingFragment extends Fragment {

    View view;
    List<Shopping> shoppingList;

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initShoppingList();
        RecyclerView recyclerView =(RecyclerView) view.findViewById(R.id.shopping_recycle_view);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(view.getContext());
        ShoppingAdapter myAdapter=new ShoppingAdapter(shoppingList);
        recyclerView.setAdapter(myAdapter);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_shopping, container, false);
        return view;
    }

    public void initShoppingList(){
        shoppingList = new ArrayList<Shopping>();
        shoppingList.add(new Shopping(R.drawable.data,"data"));
        shoppingList.add(new Shopping(R.drawable.position,"position"));
        shoppingList.add(new Shopping(R.drawable.floor,"floor"));
    }
}

Upvotes: 1

Views: 56

Answers (2)

Shazniq
Shazniq

Reputation: 463

Instead of returning null at onCreateViewHolder, you should return new MyViewHolder(view);

And you forgot to assign the layoutmanager you created on your fragment into your recyclerview (recyclerView.setLayoutManager(linearLayoutManager);)

Also, you don't need to cast recyclerview to recyclerview. You can remove (RecyclerView) from RecyclerView recyclerView =(RecyclerView) view.findViewById(R.id.shopping_recycle_view);

Upvotes: 2

Entreco
Entreco

Reputation: 12900

Looks like you are missing 2 crucial things.

  1. onCreateViewHolder should return a view. You return null.

    return new MyViewHolder(view);

  2. You forgot to set the LayoutManager to your adapter.

    recyclerView.setLayoutManager(linearLayoutManager);

Upvotes: 2

Related Questions