Attempt to invoke virtual method 'android.view.View android.widget.ListView.findViewById(int)' on a null object reference
Получаю ошибку:
04-17 19:56:04.729 6449-6449/com.vlsoft.design2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.vlsoft.design2, PID: 6449
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.widget.ListView.findViewById(int)' on a null object reference
at com.vlsoft.design2.fragment.ClassesFragment.initViews(ClassesFragment.java:49)
at com.vlsoft.design2.fragment.ClassesFragment.onCreateView(ClassesFragment.java:42)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2595)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
в таком фрагменте для вывода списка с секциями
public class ClassesFragment extends Fragment {
private ListView listView;
private List<ListData> dataList = new ArrayList<>();
public ClassesFragment() {
// Required empty public constructor
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_classes, container, false);
initViews();
prepareContent();
setAdapter();
return view;
}
private void initViews() {
listView = listView.findViewById(R.id.list_view);
}
private void prepareContent() {
for (int i = 0; i < 15; i++) {
if (i == 0 || i == 2 || i == 6 || i == 11) {
ListSection listSection = new ListSection();
listSection.setTitle("Заголовок: " + i);
dataList.add(listSection);
} else {
ListItem listItem = new ListItem();
listItem.setMessage(i + "-е значение");
listItem.setMessageLine2(i + "-е значение 2-я строка");
listItem.setMessageLine3(i + "-е значение 3-я строка");
dataList.add(listItem);
}
}
}
private void setAdapter() {
SectionedBaseAdapter adapter =
new SectionedBaseAdapter(ClassesFragment.this, dataList);
listView.setAdapter((ListAdapter) adapter);
}
}
В активности аналогичный код со списком работает. В чем проблема?
Ответы (1 шт):
Автор решения: Alex_Skvortsov
→ Ссылка
Проблема вот в этом методе:
private void initViews() {
listView = listView.findViewById(R.id.list_view);
}
У Вас, очевидно, попытка инициализировать объект через себя самого. В действительности, должно быть так:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_classes, container, false);
initViews(view);
prepareContent();
setAdapter();
return view;
}
private void initViews(View view) {
listView = view.findViewById(R.id.list_view);
}