-3

I'm trying to access an Arraylist from a different class. This works but the Arraylist is always empty.

public class CategoryFragment extends Fragment {

private List<Category> lsCategory;

public CategoryFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    lsCategory = new ArrayList<>();

    lsCategory.add(new Category(1, getString(R.string.cat_school), R.drawable.cat_school_filled_48dp));
    lsCategory.add(new Category(2, getString(R.string.cat_food), R.drawable.cat_food_filled_48dp));
    lsCategory.add(new Category(3, getString(R.string.cat_sports), R.drawable.cat_sports_filled_48dp));
    lsCategory.add(new Category(4, getString(R.string.cat_travel), R.drawable.cat_travel_filled_48dp));
    lsCategory.add(new Category(5, getString(R.string.cat_hobbies), R.drawable.cat_sports_filled_48dp));
    lsCategory.add(new Category(6, getString(R.string.cat_countries), R.drawable.cat_countries_filled_48dp));
    lsCategory.add(new Category(7, getString(R.string.cat_numbers), R.drawable.cat_countries_filled_48dp));
    lsCategory.add(new Category(8, getString(R.string.cat_animals), R.drawable.cat_animals_filled_48dp));
    lsCategory.add(new Category(9, getString(R.string.cat_nature), R.drawable.cat_nature_filled_48dp));

    View v = inflater.inflate(R.layout.fragment_category, container, false);
    RecyclerView myRv = (RecyclerView) v.findViewById(R.id.main_recyclerView);
    CategoryRecyclerViewAdapter myAdapter = new CategoryRecyclerViewAdapter(getActivity(), lsCategory);
    myRv.setLayoutManager(new GridLayoutManager(getActivity(), 3));
    myRv.setAdapter(myAdapter);
    return v;
}

public List<Category> getLsCategory() {
    return lsCategory;
}

}

In this other class I try to acces this Arraylist.

public class FlashcardFragment extends Fragment {

private List<Flashcard> lsFlashcard;
private CategoryFragment categoryFragment;

public FlashcardFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    lsFlashcard = new ArrayList<>();
    categoryFragment = new CategoryFragment();
    List<Category> calledList = categoryFragment.getLsCategory();

    if(calledList != null && !calledList.isEmpty()){
        for(int i = 0; i < calledList.size(); i++){
            int number = calledList.get(i).getId();

            if(number == 1){
                lsFlashcard.add(new Flashcard(1, getString(R.string.school_backpack), R.drawable.school_backpack));
                lsFlashcard.add(new Flashcard(2, getString(R.string.school_textbook), R.drawable.school_textbook));
                lsFlashcard.add(new Flashcard(3, getString(R.string.school_book), R.drawable.school_book));
                lsFlashcard.add(new Flashcard(4, getString(R.string.school_workbook), R.drawable.school_workbook));
                lsFlashcard.add(new Flashcard(5, getString(R.string.school_file), R.drawable.school_file));
            }
            else if(number == 2){
                lsFlashcard.add(new Flashcard(1, getString(R.string.school_backpack), R.drawable.school_backpack));
                lsFlashcard.add(new Flashcard(2, getString(R.string.school_textbook), R.drawable.school_textbook));
                lsFlashcard.add(new Flashcard(3, getString(R.string.school_book), R.drawable.school_book));
                lsFlashcard.add(new Flashcard(4, getString(R.string.school_workbook), R.drawable.school_workbook));
                lsFlashcard.add(new Flashcard(5, getString(R.string.school_file), R.drawable.school_file));
            }
            else{
                lsFlashcard.add(new Flashcard(1, getString(R.string.school_backpack), R.drawable.school_backpack));
                lsFlashcard.add(new Flashcard(2, getString(R.string.school_textbook), R.drawable.school_textbook));
                lsFlashcard.add(new Flashcard(3, getString(R.string.school_book), R.drawable.school_book));
                lsFlashcard.add(new Flashcard(4, getString(R.string.school_workbook), R.drawable.school_workbook));
                lsFlashcard.add(new Flashcard(5, getString(R.string.school_file), R.drawable.school_file));
            }
        }
    }
    else{

    }

    View v = inflater.inflate(R.layout.fragment_flashcard, container, false);
    RecyclerView myRv = (RecyclerView) v.findViewById(R.id.main_recyclerView);
    FlashcardRecyclerViewAdapter myAdapter = new FlashcardRecyclerViewAdapter(getActivity(), lsFlashcard);
    myRv.setLayoutManager(new GridLayoutManager(getActivity(), 3));
    myRv.setAdapter(myAdapter);
    return v;
}

}

The error I'm getting is:

java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference

Yassin
  • 1
  • 1
  • 1
    You are creating a `new CategoryFragment()` , instead of calling the one with the populated list. – Arnaud Oct 30 '18 at 13:49

1 Answers1

1

It is because you are creating a new instance of CategoryFragment and calling its getLsCategory(); method

categoryFragment = new CategoryFragment();
List<Category> calledList = categoryFragment.getLsCategory();

Here private List<Category> lsCategory; is an instance variable so each and every instance of the class will have its own copy of lsCategory .

If you want this variable to be same for all instance, make it as static private static List<Category> lsCategory;