java - 其他类的 Arraylist 为空
问题描述
我正在尝试从不同的类访问 Arraylist。这可行,但 Arraylist 始终为空。
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;
}
}
在这个其他类中,我尝试访问这个 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;
}
}
我得到的错误是:
java.lang.NullPointerException:尝试在空对象引用上调用接口方法“boolean java.util.List.add(java.lang.Object)”
解决方案
这是因为您正在创建一个新实例CategoryFragment
并调用它的getLsCategory();
方法
categoryFragment = new CategoryFragment();
List<Category> calledList = categoryFragment.getLsCategory();
这
private List<Category> lsCategory;
是一个实例变量,因此该类的每个实例都有自己的lsCategory
.
如果您希望此变量对于所有实例都相同,请将其设为静态private static List<Category> lsCategory;
推荐阅读
- arrays - 如何使用 angular 9 的打字稿访问对象数组中的值?
- puppeteer - 在 Cloud Run (Puppeteer e Chromium) 中打开浏览器时出错
- python - 合并列表的最有效方法,其中最终值是每个列表维护位置的最大值
- java - 我没有在 PocketTester 中得到正确的输出
- r - 将距离矩阵转换为邻接矩阵 - 图形分析
- java - 反序列化后重新注入依赖项的正确方法是什么?
- php - 注册产品考虑用户签署的计划 - Cakephp 3
- python-3.x - 计算 JPG 中的颜色数量
- javascript - 无法使用 React 中的按钮更改样式
- java - Java - 区分可运行线程类型