Я пытался использовать шаблон (активность с вкладками) в новом проекте (java) ... но он не запускается (без изменений кода). Версия 2.1.2 на Вин 11 выдана ошибка:
C:\Progetti\Android\Test\app\src\main\java\it\gattoneroph\test\ui\main\PageViewModel.java:12: ошибка: карта методов в классах Transformations не может применяться к заданным типам; private LiveData mText = Transformations.map(mIndex, new Function<Integer, String>() { ^ требуется: LiveData,Function1<X,Y> найдено: MutableLiveData,<анонимная функция<Integer,String>> причина: невозможно вывести тип-переменную (переменные) X, Y (несоответствие аргументов; <анонимная функция<Integer,String>> не может быть преобразована в Function1<X,Y>) где X, Y — переменные типа: X расширяет объект, объявленный в методе <X,Y>map(LiveData,Function1<X,Y>) Y расширяет объект, объявленный в методе <X,Y>map(LiveData,Function1<X,Y>)
сорт
public class PageViewModel extends ViewModel {
private MutableLiveData<Integer> mIndex = new MutableLiveData<>();
private LiveData<String> mText = Transformations.map(mIndex, new Function<Integer, String>() {
@Override
public String apply(Integer input) {
return "Hello world from section: " + input;
}
});
public void setIndex(int index) {
mIndex.setValue(index);
}
public LiveData<String> getText() {
return mText;
}
}
почему? Я понятия не имею, почему этот шаблон кажется сломанным.
Как объясняется в этой известной проблеме , шаблон генерирует код, ожидаемый более ранними версиями библиотеки Lifecycle. Однако этот код изменился в Lifecycle 2.6.0.
Как говорится в вашем сообщении об ошибке, замените new Function
на new Function1
, который является ожидаемым классом при использовании Lifecycle 2.6.0 или выше.
Я преобразовал или заменил
Transformations.map(mIndex, new Function<Integer, String>() {
к лямбда.
Поскольку изменение его на новую функцию Function1 у меня не работает.
спасибо (я только начинаю делать .. я застреваю на простых проблемах)