Итак, вы получите эту ошибку:
java.lang.IllegalStateException: Could not find method 11(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatCheckBox with id 'ch_sendITE'
И причина в том, что он не может найти метод, который вы определили в атрибуте andorid:onClick
для вашего CheckBox
, который вы назвали selectedItem(View view)
, однако вы уже поместили его в свой фрагмент! так что же происходит?
Таким образом, в принципе, вы не можете использовать атрибут andorid:onClick
во фрагментных макетах так же, как вы используете в макетах действий. Причина, по которой вы получили это исключение, заключается в том, что система android не может найти selectedItem(View view)
в вашей активности; потому что вы определили его в своем фрагменте, а не в своей деятельности.
В документации ясно, что атрибут android:onClick
следует использовать только в макетах действий, как указано в здесь" Внутри Activity, в которой размещается этот макет, следующий метод обрабатывает событие click ".
Так что для решения этой проблемы у вас есть несколько вариантов:
Опция 1: Программно обрабатывать обработчики кликов вида фрагмента с помощью OnClickListener
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.activity_others, container, false);
//init check Box
send_it = v.findViewById(R.id.ch_sendITE);
send_it.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return v;
}
Опция 2: Если вы настаиваете на использовании android:onClick
в макете вашего фрагмента, то вам следует поставить selectedItem()
метод в вашей деятельности, а затем явно вызвать selectedItem()
вашего фрагмента из selectedItem()
:
в вашей деятельности:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.temp_activity);
}
public void selectedItem(View view) {
((MyFragmentClass) getSupportFragmentManager().findFragmentById(R.id.fragment_container)).selectedItem(view);
}
}
Макет деятельности:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/fragment_container"
android:name="com.example.android.myapp.MyFragmentClass"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true" />
</RelativeLayout>
Проверьте это: 1 , 2 для получения более подробной информации.