0

I created an app with a recycler view inside a fragment but my app crashes every time I run it due to the following exception in holder.titleText.setText(itemArrayList.get(position).getText()):

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

Here is MyAdapter code:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    Context context;
    ArrayList<Item> itemArrayList;

    public MyAdapter(Context context, ArrayList<Item> itemArrayList) {
        this.context = context;
        this.itemArrayList = itemArrayList;
    }


    @NonNull
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.fragment_item_list, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Item item = itemArrayList.get(position);
        holder.titleText.setText(itemArrayList.get(position).getText());
        holder.titleImage.setImageResource(item.getImage());
    }


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

    public static class ViewHolder extends RecyclerView.ViewHolder{
        ImageView titleImage;
        TextView titleText;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            titleImage = itemView.findViewById(R.id.titleiImage);
            titleText = itemView.findViewById(R.id.titleText);
        }
    }
}

Here is my ItemFragment code:

public class ItemFragment extends Fragment {
    private ArrayList<Item> itemArrayList;
    private int[] imageResourceId;
    private String[] texts;
    private MyAdapter myAdapter;
    private RecyclerView recyclerView;

    public ItemFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_item_list, container, false);
        dataInitialize();
        myAdapter = new MyAdapter(getContext(), itemArrayList);
        recyclerView = (RecyclerView) view;
        recyclerView.setAdapter(myAdapter);
        return view;
    }

    private void dataInitialize() {
        itemArrayList = new ArrayList<>();
        imageResourceId = new int[] {
                R.drawable.ic_launcher_background,
                R.drawable.ic_launcher_background,
                R.drawable.ic_launcher_background,
        };

        texts = new String[] {
                getString(R.string.blackpink),
                getString(R.string.redvelvet),
                getString(R.string.itzy),
        };

        for(int i = 0; i < texts.length; i++) {
            Item item = new Item(imageResourceId[i], texts[i]);
            itemArrayList.add(item);
        }
    }
}

I searched the web but still was not able to find a solution. I would appreciate your help^^

user2357113
  • 162
  • 2
  • 15
  • 1
    You're inflating the wrong `R.layout` in `onCreateViewHolder()`. You want to inflate the one with `titleiImage` and `titleText` there. – Mike M. Mar 29 '23 at 03:15
  • Check out [this article](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) for tips on debugging your code. – Code-Apprentice Mar 29 '23 at 03:24
  • https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it gives an indepth explanation about NullPointerException. – Code-Apprentice Mar 29 '23 at 03:26

1 Answers1

1

in your Adapter, it seem you put wrong layout here 'R.layout.fragment_item_list':

    public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.fragment_item_list, parent, false);
        return new ViewHolder(view);
    }

If it not, make sure in 'R.layout.fragment_item_list' have a Textview with id 'titleText'

ninhnau19
  • 695
  • 1
  • 3
  • 16