小编qua*_*pps的帖子

如何在RecyclerView Adapter中使用Architecture Components ViewModel?

我有多个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)

java android android-architecture-components

21
推荐指数
2
解决办法
9393
查看次数

android架构组件与即时应用程序

我想让我的应用程序为即时应用做好准备.我创建了一个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

2
推荐指数
1
解决办法
999
查看次数

在Flutter中通过Function(T)传递泛型类型

我正在尝试创建一个通用的消费者小部件,以方便其子视图模型。因此,我有两个功能。一个在初始化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)

generics dart flutter flutter-widget

2
推荐指数
1
解决办法
255
查看次数