setOnClickListener генерирует исключение nullPointerException во время выполнения
У меня есть активность, которая имеет фрагмент. Этот фрагмент меняет свой макет в зависимости от того, что происходит, например:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View v = null;
switch(nLesson)
{
case 1:
switch(nPage)
{
case 0: v = inflater.inflate(R.layout.lesson, container, false);
break;
case 1: v = inflater.inflate(R.layout.basic, container, false);
break;
case 2: v = inflater.inflate(R.layout.whatever, container, false);
doIt();
break;
case 3: v = inflater.inflate(R.layout.lesso, container, false); break;
}
break;
}
return v;
}
Я изменяю значения nLesson и nPage, как это принято, а затем использую
activity.getFragmentManager().beginTransaction()
.detach(instance)
.attach(instance)
.commit();
Я освежаю это.
Однако в одном из этих макетов у меня есть некоторые представления, с которыми я хочу работать. Я пытаюсь установить onClickListener на одном из представлений, но он всегда отображает исключение nullPointerException и прерывается при запуске приложения (не во время компиляции). Я пытался установить onClickListener в "onCreateView
","onStart
","onResume
","onActivityCreated
и т. д. Нигде не работало. Есть идеи?
Спасибо, лучшее!
РЕДАКТИРОВАТЬ: Я добавляю некоторые вещи, которые люди спрашивали меня.
Макет, который ломается, называется "что угодно"; Это tablelayout
с 8 tablerows
и 8 imagebuttons
на каждой tablerow
(то есть 8x8=64 квадрата, шахматная доска). Все квадраты обнуляются, когда я пытаюсь добавить к ним слушателя.
Все они похожи на
<ImageButton
android:id="@+id/squareA8"
android:contentDescription="@string/r8c1"
android:layout_height="35dp"
android:layout_width="35dp"
android:tag="true"/>
Это код Java, который ломается:
public void doIt()
{
chessHandler = new ChessHandler(cActivity);
chessHandler.initialize();
}
ChessHandler - мой класс, я не буду его публиковать, потому что он не имеет отношения к этому делу. Это интересная часть кода:
a8 = (ImageButton)activity.findViewById(R.id.squareA8);
a8.setOnClickListener(new on_click(a8, a,8));
Есть 64 строки, как эти, setOnClickListener
перерывы, потому что a 8 по-прежнему установлен в нуль после findViewById
,
1 ответ
a8 = (ImageButton)activity.findViewById(R.id.squareA8);
a8.setOnClickListener(new on_click(a8, a,8));
В типичном onCreateView()
, вызов findViewById()
на вид, который вы только что надули, а не activity
, Вы еще не вернули представление в платформу, и оно не является частью иерархии представлений действий, поэтому никакие дочерние представления не могут быть найдены в действии.