https://developer.android.com/topic/libraries/architecture/
在Android体系结构蓝图中,为什么匕首基于mvp体系结构而不是MVVM体系结构?是因为它不适用于MVVM体系结构吗?还是其他原因?
答案 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
项目的简单示例。随时克隆/下载以运行该项目。