我有多个ViewHolders,它们在垂直RecyclerView中作为独立视图工作.我正在练习新的Architecture Components ViewModel.
在我的ViewModel中,我有一些我想要观察的MutableLiveData列表.但我怎么称呼
ViewModelProviders.of((AppCompatActivity)getActivity()).get(FilterViewModel.class)
Run Code Online (Sandbox Code Playgroud)
和
mFilterViewModel.getCountries().observe(this, new Observer<ArrayList<TagModel>>() {
@Override
public void onChanged(@Nullable ArrayList<TagModel> tagModels) {
}
});
Run Code Online (Sandbox Code Playgroud)
不泄漏活动或将活动保存在适配器内.
我的ViewModel
public class FilterViewModel extends ViewModel {
private final MutableLiveData<ArrayList<TagModel>> mCountries;
private final MutableLiveData<ArrayList<TagModel>> mSelectedCountryProvinceList;
private final MutableLiveData<ArrayList<TagModel>> mDistanceList;
public FilterViewModel(){
mCountries = new MutableLiveData<>();
mSelectedCountryProvinceList = new MutableLiveData<>();
mDistanceList = new MutableLiveData<>();
TagStore.getInstance().subscribe(new StoreObserver<TagSearchList>() {
@Override
public void update(TagSearchList object) {
mCountries.setValue(object.getCountries());
}
@Override
public void update(int id, TagSearchList object) {
if (id == 5){
TagStore.getInstance().unSubcribe(this);
update(object);
}
} …Run Code Online (Sandbox Code Playgroud) 我想让我的应用程序为即时应用做好准备.我创建了一个app模块,基本模块和一个功能模块.如果我在这个配置中运行我的项目一切都很好.
当我在我的基本模块Gradle文件中实现以下行.
annotationProcessor "android.arch.lifecycle:compiler:1.0.0"
api "android.arch.lifecycle:extensions:1.0.0"
Run Code Online (Sandbox Code Playgroud)
Gradle构建成功但我丢失了默认活动,无法运行项目.默认活动位于我的基本模块清单中.
如果我用实现更改扩展行.
implementation "android.arch.lifecycle:extensions:1.0.0"
Run Code Online (Sandbox Code Playgroud)
发生以下错误:
错误:任务':app:preDebugBuild'的执行失败.
Android依赖项'android.arch.lifecycle:runtime'具有不同版本的编译(1.0.0)和运行时(1.0.3)类路径.您应该通过DependencyResolution手动设置相同的版本
有谁知道问题是什么?
android module android-gradle-plugin android-instant-apps android-architecture-components
我正在尝试创建一个通用的消费者小部件,以方便其子视图模型。因此,我有两个功能。一个在初始化ViewModel之后具有功能(T),另一个用于将模型传递给其子Widget。
泛型类中的子元素是ChangeNotifier的子元素,在我要在两个函数中发送T值之前,它都可以正常工作。
然后我得到以下错误:
类型'(OnBoardingViewModel)=> Null'不是类型'(ChangeNotifier)=> void'的子类型
和
类型'(BuildContext,OnBoardingViewModel,Widget)=>脚手架'不是类型'(BuildContext,ChangeNotifier,Widget)=> Widget'的子类型
但是,当我将扩展类型从ChangeNotifier更改为OnBoardingViewModel时,一切正常。
有人可以帮助我,或解释为什么这不起作用吗?
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:provider/provider.dart';
class StateFullConsumerWidget<T extends ChangeNotifier> extends StatefulWidget{
StateFullConsumerWidget({@required this.builder,Key key,this.onPostViewModelInit,this.child}) : super(key : key);
final Widget Function(BuildContext context, ChangeNotifier value, Widget child) builder;
final Widget child;
final void Function(T) onPostViewModelInit;
@override
_StateFullConsumerWidgetState<T> createState() => _StateFullConsumerWidgetState<T>();
}
class _StateFullConsumerWidgetState<T extends ChangeNotifier> extends State<StateFullConsumerWidget>{
T _viewModel;
@override
void initState() {
// assign the model once when state is initialised
_viewModel = GetIt.instance.get<T>();
widget.onPostViewModelInit(_viewModel);
super.initState();
}
@override …Run Code Online (Sandbox Code Playgroud)