我一直在玩这个github repo:https://github.com/patloew/countries来学习DI,mvvm,领域和所有好东西。当我在MainAdapter.java中添加第三个标签时:
Dim lb as label= me.master.findcontrol("Label1"):lb.text="Hello worold"
我在BaseFragment.java中遇到异常:
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new AllCountriesFragment();
case 1:
return new FavoriteCountriesFragment();
//case 2:
// return new FavoriteCountriesFragment();
}
return null;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return res.getString(R.string.tab_title_all);
case 1:
return res.getString(R.string.tab_title_favorites);
//case 2:
// return res.getString(R.string.tab_title_favorites);
}
return null;
}
第三个片段不必与第二个片段相同,它实际上是一个全新的片段。在onDestroyView
中注释掉viewModelprotected final View setAndBindContentView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState, @LayoutRes int layoutResID) {
if (viewModel == null)
throw new IllegalStateException("viewModel must already be set via injection");
java.lang.IllegalStateException: viewModel must already be set via injection
避免崩溃,但之后会发生奇怪的事情。
有关如何帮助我理解大局并解决此问题的任何指示?问题确实是为什么不在注册表更改中注入viewModel 。非常感谢。
答案 0 :(得分:1)
从Adam's blog替换FragmentPagerAdapter
FixedFragmentStatePagerAdapter
似乎可以避免问题(viewModel = null)
。但是,正如您正确指出的那样,fragmentComponent().inject(this)
在OnCreateView
中被调用而不是,而在onCreate
中被调用。一切都好。非常感谢您的意见。