【发布时间】:2021-02-11 16:17:55
【问题描述】:
我在原生 Android 开发中应用 MVVM 模式。我有一个 LoginActivity,它将承载两个不同的片段,即 LoginFragment 和 RegisterFragment。我不确定在这种情况下该怎么做。 LoginActivity 的视图模型或两个片段的两个不同的视图模型。如果我为活动创建一个视图模型,登录和注册视图绑定和逻辑将相互混淆。但是在许多教程中,开发人员说我们应该为每个活动创建一个视图模型并从片段访问这些视图模型。我应该如何处理这里的事情?
如有必要,我的登录片段
public class LoginFragment extends Fragment {
private LoginViewModel loginViewModel;
public LoginFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FragmentLoginBinding fragmentLoginBinding = DataBindingUtil.setContentView(getActivity(), R.layout.fragment_login);
loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory(getActivity().getApplication(),
LoginRepository.getInstance())).get(LoginViewModel.class);
fragmentLoginBinding.setViewModel(loginViewModel);
fragmentLoginBinding.executePendingBindings();
return inflater.inflate(R.layout.fragment_login, container, false);
}
}
和登录活动
public class LoginActivity extends AppCompatActivity {
private LoginViewModel loginViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
FragmentUtil.replaceFragment(getSupportFragmentManager(), R.id.entry_frame, new LoginFragment(), "login");
}
}
【问题讨论】:
-
我更喜欢创建两个视图模型,因为屏幕不同,具有不同的功能......如果您完成了一些过程并且需要与活动通信,您可以共享此视图模型并使用 livedata通知一个动作:关闭、下一步、上一步等
标签: android android-activity mvvm fragment