Android Livedata观察不到视图
我有下面的活动结构,我想观察实时数据,根据数据,我想更改片段。第一个add fragment调用可以正常工作,但是observe块下的调用不能正常工作,因为它确实看到activity\u login视图未设置,因此无法在其中找到framelayout。我应该在哪里观察实时数据以确保视图已设置。我尝试了ViewCreate等,但找不到方法Android Livedata观察不到视图,android,android-activity,mvvm,view,fragment,Android,Android Activity,Mvvm,View,Fragment,我有下面的活动结构,我想观察实时数据,根据数据,我想更改片段。第一个add fragment调用可以正常工作,但是observe块下的调用不能正常工作,因为它确实看到activity\u login视图未设置,因此无法在其中找到framelayout。我应该在哪里观察实时数据以确保视图已设置。我尝试了ViewCreate等,但找不到方法 public class LoginActivity extends AppCompatActivity { private LoginViewModel lo
public class LoginActivity extends AppCompatActivity {
private LoginViewModel loginViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory(getApplication(),
LoginRepository.getInstance())).get(LoginViewModel.class);
FragmentUtil.addFragment(getSupportFragmentManager(), R.id.entry_frame, new LoginFragment(), FragmentTag.LOGIN_FRAGMENT_TAG);
loginViewModel.getCurrentFragmentEnum().observe(this, (currentFragmentEnum) -> {
if (currentFragmentEnum == LoginActivityFragments.REGISTER_FRAGMENT) {
FragmentUtil.addFragment(Objects.requireNonNull(getSupportFragmentManager()), R.id.entry_frame, new RegisterFragment(), FragmentTag.REGISTER_FRAGMENT_TAG);
} else if (currentFragmentEnum == LoginActivityFragments.LOGIN_FRAGMENT) {
FragmentUtil.addFragment(Objects.requireNonNull(getSupportFragmentManager()), R.id.entry_frame, new LoginFragment(), FragmentTag.LOGIN_FRAGMENT_TAG);
}
});
}
}
登录碎片
public class LoginFragment extends Fragment {
private LoginViewModel loginViewModel;
public LoginFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_login, container, false);
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 view;
}
}
但是那些在observe块下的没有,因为它确实看到活动\u登录视图未设置
这意味着什么?你可以发布你的addFragment
codeiadded,当观测者触发它时,它应该执行代码块来改变片段,但在那个时候,布局还并没有设置好。