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

时间:2018-12-31 09:53:27

标签: android mvvm mvp dagger android-architecture

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

在Android体系结构蓝图中,为什么匕首基于mvp体系结构而不是MVVM体系结构?是因为它不适用于MVVM体系结构吗?还是其他原因?

1 个答案:

答案 0 :(得分:0)

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

以下是MVVM体系结构中的匕首用法示例。

这是一个Module,提供ViewModel和其他一些对象。

@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);
    }


}

和相应的组件

@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
    void inject(MainActivity mainActivity);
}

和组分的注入。

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项目的简单示例。随时克隆/下载以运行该项目。