почему я не могу вызвать атрибут onClick вида фрагмента - PullRequest
0 голосов
/ 18 апреля 2020

если я попробую это, я получу эту ошибку времени выполнения

AndroidRuntime: FATAL EXCEPTION: main
Process: com.chat.okitokichatchat, PID: 3365
java.lang.IllegalStateException: Could not find method onShowDialog(View) in a parent or ancestor Context for android:onClick attribute defined on view class 

почему я не могу это вызвать? с помощью onClick? и почему система пытается вызвать его от родителя, как активность? а также я обнаружил предупреждение "не могу найти объявление go в" в атрибуте XML. Скажите, почему?

1 Ответ

0 голосов
/ 19 апреля 2020

Полагаю, вы пытаетесь использовать android:onClick в макете фрагмента, но это определенно повысит IllegalStateException, и вот исключение, которое вы получили

java.lang.IllegalStateException: Could not find method onShowDialog(View) in a parent 
or ancestor Context for android:onClick attribute defined on view class 

Из журнала вы пытаетесь добавьте android:onClick = onShowDialog к одному из ваших представлений макета фрагмента.

И возникает ошибка, потому что вы можете использовать android:onClick только в макете деятельности; поэтому он пытается найти метод onShowDialog(View view) в активности, связанной с этим фрагментом, и не может.

Итак, возможные решения:

Не использовать android:onClick с фрагментами, просто используйте View.OnClickListener вместо этого программно, вызывая setOnClickListener().

Если вы настаиваете на этом, вы можете добавить onShowDialog(View view) к представлению в вашем представлении. макет фрагмента, но вам нужно определить этот метод в своей деятельности, как показано ниже

public void onShowDialog(View view) {
    Fragment f = getSupportFragmentManager().findFragmentByTag... // get the fragment
    ((MyFragment) f).onShowDialog();
}

, а затем создать onShowDialog() в вашем фрагменте.

Примечание: я предполагаю, что ваш фрагмент назван MyFragment

...