ActivityViewModels和懒惰ViewModelProvider之间的区别? 我已经看到了两种初始化视图模型的方法: private val someViewModel: SomeViewModel by activityViewModels()
private val someOtherViewModel: SomeOtherViewModel by lazy {
ViewModelProvider(this).get(SomeOtherViewModel::class.java)
} 我知道lazy只在需要的时候初始化ViewModel,activityVie
我想从一个片段到另一个片段共享一些整数值。当设备更改配置时,我不希望丢失数据。
因此,我遇到了两种方法,希望知道哪一种更适合我的用例:
1.在多个片段之间共享一个ViewModel
class SharedViewModel : ViewModel(){
...
}
class FragmentA : Fragment(){
private val model: SharedViewModel by activityViewModels()
...
}
class FragmentB : Fragment(){
private val model: Shar
我有一个包含很多片段的活动,我想在片段之间使用共享视图模型来共享东西,但是当我像在片段中那样初始化它时,它会显示一个错误,如果可能的话,访问它的正确方法是什么?
val model : sharedViewModel by activityViewModels()
我试过做ViewModelProvider,但不知道如何正确地做,因为我正在用kotlin编码
LiveData没有在子查看器片段上观察到子片段有一个用于访问数据的共享视图模型。
在这里,FragmentA和FragmentB是查看器的一部分,它们都共享一个viemodel SharedViewModel。
public class SharedViewModel extends AndroidViewModel { //in Java
private final MutableLiveData<Data> mLiveData = new MutableLiveData<>();
public LiveData<Data> getLi
Observer不调用第二个片段。任何帮助都将不胜感激。
Fragment1
viewModel.productData(model)
findNavController().navigate(R.id.actionProductListToDetails)
ViewModel类
val productData = MutableLiveData<ModelProductSubItem>()
fun productData(data: ModelProductSubItem) {
productData.value = data
}
F
我使用在非空构造函数的视图模型中使用。但我得到了一个非法的州例外,说它已经附在了一个生命周期所有者(见下文)。当我使用SavedStateViewModelFactory时,它可以正常工作,但它不支持非空构造函数,并且是最后一个类。
TestStateAFragment
class TestStateAFragment : Fragment() {
companion object {
fun newInstance() : TestStateAFragment {
val fragment = TestStateAFragment()
我对使用Android架构组件非常陌生,所以我决定使用GithubBrowserSample来构建我的应用程序,以实现我的许多用例。但我有一个问题,我不知道用这种方法在片段之间共享视图模型的正确方式是什么。
我想要共享视图模型,因为我有一个带有viewpager的片段,其中有两个片段需要观察父片段视图模型的数据
我以前在的基础上用过它。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
Vi
我尝试使用ViewModel将数据从DialogFragment发送到Fragment,但似乎fragment和Dialog fragment都引用了不同的ViewModel实例。所以我不能访问数据。有没有办法解决这个问题?谢谢 这是我的片段 @AndroidEntryPoint
class FragmentToReceiveData:BaseFragment(R.layout.fragment_1){
private val viewModel: AddScheduleViewModel by viewModels()
override fun onViewCreated(vi
我有一个包含3个片段的活动:登录/注册/忘记密码 登录,这是这3个工作中的主要片段,但是,当我使用注册/忘记密码片段时,我遇到了问题。 目前我有这个导航组件: my nav component 登录片段: class SignInFragment : Fragment() {
private val loginViewModel: LoginViewModel by activityViewModels()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedIns
我成功地实现了基于存储库的MVVM。但是,我需要在片段之间传递一个类对象。我在多个片段之间实现了一个sharedViewModel,但是set值总是给出null。我知道这是因为我没有将活动上下文传递给片段中的视图模型的初始化。我正在使用ModelFactory来创建视图模型的实例,但是我无法找到给出'applicationActivity()‘的方法。
这是我的modelFactory:
class MyViewModelFactory constructor(private val repository: MyRepository): ViewModelProvider.Facto
我最近从ViewModel和AndroidViewModel开始,我发现初始化viewModel实例有不同的方法,对于我来说都很好,我只想知道什么时候使用哪一个?我应该在哪里初始化viewModel对象?以下是获取viewModel实例的不同方法,并适用于我:
val myViewModel1 = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(MyViewModel::class.java)
val myViewModel2 = ViewModelProvider.AndroidViewM
我在BaseActivity中创建了一个工具栏来实现一个通用工具条,代码如下所示。
// BaseActivity
abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
lateinit var cartCnt: TextView
private val viewModel by lazy {
ViewModelProvider(this, CartViewModelFactory())[CartViewModel::class.java]
}
o
我想知道,对于下面两个代码片段,推荐使用哪种方式?
构造ViewModelProvider时使用片段
public class MyFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ViewModelProvider viewModelProvider = new ViewModelProvider(this);
tabI
我目前正在将我的项目架构从MVP转换为MVVM。当我在做这件事的时候,我发现一些让我困惑的事情:
在项目ViewModelProvider.Factory:的ScheduleViewModelFactory.kt中,工厂实现了
class ScheduleViewModelFactory(
private val userEventRepository:DefaultSessionAndUserEventRepository
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
over
我是Android开发和制作Android地图应用程序的新手。现在,我有三个片段:一个是地图,两个是位置的回收器视图列表。所有这些都在我的主要活动中的导航主机中。我想要做的是单击列表中的位置,它会将我带到地图片段并在地图上放置一个标记。
我的想法是在我的列表片段中设置视图模型,并在我的映射片段中获取视图模型。
我的视图模型:
private val _location = MutableLiveData<Location>()
val location: LiveData<Location> = _location
fun setLocation(location:
我有以下几个类: The ViewModel class MealPlanViewModel @AssistedInject constructor(private val mealPlanRepository: MealPlanRepository, @Assisted private val canteenId: String) : ViewModel() {
// AssistedInject code for using ViewModel injection with runtime parameters
@AssistedInject.Factory
我目前正在用savedState试用新的Jetpack ViewModel。
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01'
我正在使用1个Activity并尝试与2个片段共享1个ViewModel,但当我尝试启动第二个片段时,我从标题中得到错误。
这就是我用savedInstance调用ViewModel的方法:
val repository = (activity?.application as App).getRepository()
vie