android new view参数,Android ViewModel附加参数

在Android中,当使用自定义ViewModel时,可以通过创建一个ViewModel工厂类来传递额外参数。例如,创建一个`MyViewModelFactory`,在其中初始化ViewModel时传入必要的参数。在实例化ViewModel时,使用这个工厂类来提供参数。这样,可以在构造函数中使用这些参数,如数据库查询等。
摘要由CSDN通过智能技术生成

有没有办法将其他parameter passing给我的自定义AndroidViewModel构造函数,除了Application上下文。 例:

public class MyViewModel extends AndroidViewModel { private final LiveData myObjectList; private AppDatabase appDatabase; public MyViewModel(Application application, String param) { super(application); appDatabase = AppDatabase.getDatabase(this.getApplication()); myObjectList = appDatabase.myOjectModel().getMyObjectByParam(param); } }

当我想要使用我的自定义ViewModel类时,我在我的片段中使用此代码:MyViewModel myViewModel = ViewModelProvider.of(this).get(MyViewModel.class)

所以我不知道如何将额外的参数String param传递给我的自定义ViewModel 。 我只能传递Application上下文,但不能传递其他参数。 我真的很感激任何帮助。 谢谢。

编辑:我添加了一些代码。 我希望现在好多了。

您需要为ViewModel创建工厂类。

public class MyViewModelFactory extends ViewModelProvider.NewInstanceFactory { private Application mApplication; private String mParam; public MyViewModelFactory(Application application, String param) { mApplication = application; mParam = param; } @Override public T create(ClassmodelClass) { return (T) new MyViewModel(mApplication, mParam); } }

在实例化视图模型时,您会这样做:

MyViewModel myViewModel = ViewModelProviders.of(this, new MyViewModelFactory(this.getApplication(), "my awesome param")).get(MyViewModel.class);

对于在多个不同视图模型之间共享的一个工厂,我会扩展mlyko的答案,如下所示:

public class MyViewModelFactory extends ViewModelProvider.NewInstanceFactory { private Application mApplication; private Object[] mParams; public MyViewModelFactory(Application application, Object... params) { mApplication = application; mParams = params; } @Override public T create(ClassmodelClass) { if (modelClass == ViewModel1.class) { return (T) new ViewModel1(mApplication, (String) mParams[0]); } else if (modelClass == ViewModel2.class) { return (T) new ViewModel2(mApplication, (Integer) mParams[0]); } else if (modelClass == ViewModel3.class) { return (T) new ViewModel3(mApplication, (Integer) mParams[0], (String) mParams[1]); } else { return super.create(modelClass); } } }

并实例化视图模型:

ViewModel1 vm1 = ViewModelProviders.of(this, new MyViewModelFactory(getApplication(), "something")).get(ViewModel1.class); ViewModel2 vm2 = ViewModelProviders.of(this, new MyViewModelFactory(getApplication(), 123)).get(ViewModel2.class); ViewModel3 vm3 = ViewModelProviders.of(this, new MyViewModelFactory(getApplication(), 123, "something")).get(ViewModel3.class);

具有不同构造函数的不同视图模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值