Используйте принцип абстракции, если вам нужна возможность обобщить несколько классов путем расширения интерфейса или абстрактного класса.
<data>
<variable
name="customInterface"
type="example.toolbar.CustomInterface" />
</data>
...
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSnackbar"
style="@style/Button.Orange"
android:text="coba snackbar"
app:safeOnClick="@{() -> customInterface.performClick()}"/>
Этот интерфейс заставит расширяющиеся классы реализовать определенное поведение (определенные методы). Пример:
package example.toolbar
interface CustomInterface {
void performOnClick();
}
Оба ваших фрагмента теперь могут реализовать этот интерфейс. Вы сможете передать экземпляр интерфейса в экземпляр привязки представления. Пример:
class ExampleBasicToolbarFragment extends Fragment, CustomInterface {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// create view binding instance
viewBinding.customInterface = this
}
@Override
void performOnClick() {
...
}
}
class ExampleToolbarImageFragment extends Fragment, CustomInterface {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// create view binding instance
viewBinding.customInterface = this
}
@Override
void performOnClick() {
...
}
}