Я пытаюсь использовать последние функции Android - Kotlin, mvvm, компоненты архитектуры, jetpack, привязку данных, одно действие - многие фрагменты подходят с новым графом навигации, но я борюсь с обработкой событий пользовательского интерфейса во фрагментах
В действии все просто с kotlin-android-extensions В XML я создаю кнопку вроде этого:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="clicked"/>
, а в действии я просто пишу
fun clicked(view : View){
}
Это прекрасно, но, к сожалению, не работает во фрагменте.Да, есть возможность обрабатывать событие в Activity и отправлять его во фрагмент, но это ужасно.
Следующий вариант - использовать интерфейс,
public interface MyClickCallback{
void onLoginButtonClick();
}
реализовать это во фрагменте.В XML это выглядит так:
<variable
name="clickCallback"
type="com.test.MyClickCallback" />
, затем в onCreateView фрагмента я должен установить clickCallback для фрагмента, и, наконец, я могу использовать его
@Override fun onLoginButtonClick() {
}
Проблема, с которой я сталкиваюсь, заключается в том, чтобыобъявляйте интерфейс и при каждом новом событии пользовательского интерфейса улучшайте этот интерфейс и обновляйте фрагмент, который его реализует
Следующая опция - RxView.clicks, которая действительно великолепно выглядит со всеми ее функциями. Например:
RxView.clicks(mSearchBtn)
.throttleFirst(2, TimeUnit.SECONDS)
.map(aVoid -> mSearchEdit.getText().toString().trim())
.filter(s -> !TextUtils.isEmpty(s))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> {
KeyBoardUtil.closeKeybord(mSearchEdit,
SearchActivity.this);
showSearchAnim();
clearData();
content = s;
getSearchData();
});
Проблема здесь в том, что я должен связать его с компонентом пользовательского интерфейса - mSearchBtn.Я не хочу это :-).Я не хочу иметь какой-либо компонент пользовательского интерфейса во фрагменте, если я действительно не должен.Я всегда общаюсь с файлом макета через переменные, объявленные в макете, как это
<data>
<variable
name="items"
type="java.util.List" />
</data>
Я бы хотел связать его с переменной, объявленной в XML, которая установлена в кнопке
android:onClick="myclick"
НоЯ не нашел способ, как это сделать.
Кто-нибудь может мне помочь, может быть, с другими простыми и приятными вариантами?