Dagger 2,MVVM:添加第三个标签并来回摧毁应用程序

时间:2017-08-11 00:37:40

标签: java android mvvm realm dagger

我一直在玩这个github repohttps://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

中注释掉viewModel
protected 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 。非常感谢。

1 个答案:

答案 0 :(得分:1)

Adam's blog替换FragmentPagerAdapter FixedFragmentStatePagerAdapter似乎可以避免问题(viewModel = null)。但是,正如您正确指出的那样,fragmentComponent().inject(this)OnCreateView中被调用而不是,而在onCreate中被调用。一切都好。非常感谢您的意见。