@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
newsList = getNews(); // 返回 null!方法末尾 return newsList 但 newsList 未賦值
adapter = new NewsAdapter(activity, R.layout.news_item, newsList);
}
getNews() 方法中 return newsList; 但 newsList 為成員變量,方法內新建了局部 newslist 並 add 到局部變量,成員變量 newsList 仍為 null → Adapter 內部持有 null 列表 → getCount() 拋 NPE。
public List getNews() {
List list = new ArrayList<>(); // 局部變量
News n1 = new News(); n1.setTitle("..."); list.add(n1);
News n2 = new News(); n2.setTitle("..."); list.add(n2);
return list; // 返回局部列表
}
// onCreateView 中設置 Adapter(View 已創建)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.news_title_frag, container, false);
titleListView = view.findViewById(R.id.title_list);
adapter = new NewsAdapter(getActivity(), R.layout.news_item, getNews()); // 這裡初始化
titleListView.setAdapter(adapter);
return view;
}
onCreate 或 onViewCreated,而非 onAttach。new ArrayList<>() 兜底)。setAdapter(new Adapter(emptyList)),數據到達後 adapter.notifyDataSetChanged()。