首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么是todo-mvp-dagger,而不是todo-mvvm-dagger?

为什么是todo-mvp-dagger,而不是todo-mvvm-dagger?
EN

Stack Overflow用户
提问于 2018-12-31 17:53:27
回答 1查看 96关注 0票数 1

https://developer.android.com/topic/libraries/architecture/

在Android架构蓝图中,为什么dagger基于mvp架构而不是MVVM架构?是不是因为它不适合MVVM架构?还是其他原因?

EN

回答 1

Stack Overflow用户

发布于 2018-12-31 18:04:25

Dagger适用于任何架构,因为它不是架构依赖组件。它是一个依赖注入库。我不知道为什么蓝图示例不包含MVVM-Dagger实现。

下面是MVVM架构中dagger的一些用法示例。

这是一个提供ViewModel和其他几个对象的Module

代码语言:javascript
复制
@Module(includes = {
        RecyclerViewModule.class,
        ActivityModule.class
})
class MainActivityModule {

    private final MenuAdapter.Callback menuAdapterCallback;

    MainActivityModule(MenuAdapter.Callback menuAdapterCallback) {
        this.menuAdapterCallback = menuAdapterCallback;
    }

    @Provides
    MainActivityViewModel provideMainActivityViewModel(
            FragmentActivity fragmentActivity,
            MainActivityViewModelFactory factory
    ) {

        return ViewModelProviders.of(fragmentActivity, factory)
                .get(MainActivityViewModel.class);
    }


    @Provides
    MenuAdapter.Callback provideMenuAdapterCallback() {
        return menuAdapterCallback;
    }

    @Provides
    MainActivityViewModelFactory provideViewModelFactory(MenuAdapter menuAdapter) {
        return new MainActivityViewModelFactory(menuAdapter);
    }


}

以及相应的组件

代码语言:javascript
复制
@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
    void inject(MainActivity mainActivity);
}

以及组件的注入。

代码语言:javascript
复制
public class MainActivity extends BaseAppCompatActivity implements MenuAdapter.Callback {


    @Inject
    MainActivityViewModel viewModel;

    @Inject
    DividerItemDecoration divider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DaggerMainActivityComponent.builder()
                .activityModule(new ActivityModule(this))
                .mainActivityModule(new MainActivityModule(this))
                .build()
                .inject(this);

        binding.include.rvMenu.addItemDecoration(divider);

        binding.setViewModel(viewModel);

    }


}

您可以从here获取完整的项目。这是一个简单的MVVM + Dagger2 + Retrofit + RxJava + DataBinding项目示例。您可以随意克隆/下载以运行该项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53986031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档