情况是我需要在我的Activity中注入一个变量(它将是ViewModel),我可以从两个不同的按钮推送:
我们推送哪个按钮并不重要,它们都引导我们进行另一个活动,但ViewModel将根据按钮执行不同的工作。
我想知道如何在构造函数或其他选项中放置标记的有效方法。
这是我的代码(BaseActivity):
public abstract class BaseActivity extends AppCompatActivity {
protected ApplicationComponent applicationComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
initDIComponent();
super.onCreate(savedInstanceState);
applicationComponent = getApplicationComponent();
}
/**
* Get the Main Application component for dependency injection.
*
* @return {@link com.denis.mypocket.internal.di.components.ApplicationComponent}
*/
public ApplicationComponent getApplicationComponent() {
return ((MyPocketApp) getApplication()).getApplicationComponent();
}
/**
* Get an Activity module for dependency injection.
*
* @return {@link com.denis.mypocket.internal.di.modules.ActivityModule}
*/
protected ActivityModule getActivityModule() {
return new ActivityModule(this);
}
使用ViewModel的活动:
public class AddTransactionActivity extends BaseActivity {
@Inject
public AddTransactionViewModel viewModel;
private ActivityAddTransactionBinding binding;
private boolean isIncome = false;
@Override
public void onCreate(Bundle savedInstanceState) {
isIncome = getIntent().getBooleanExtra(PLConstants.INTENT_INCOME_FLAG,false);
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_add_transaction);
binding.setViewModel(viewModel);
binding.addTrans.setOnClickListener(viewModel.addOnClick);
configireToolbar(binding.toolbarAddTrans.toolbar, R.string.toolbar_add_trans, true);
}
@Override
protected void initDIComponent() {
DaggerAddTransactionComponent.builder()
.applicationComponent(getApplicationComponent())
.activityModule(getActivityModule())
.build().inject(this);
}
答案 0 :(得分:1)
@Module
用于提供依赖项。如果您使用2个不同的用例重复使用相同的活动,则需要更改模块。
只需在模块构造函数中添加int
或enum
参数,并传入要使用的类型(加法或减法)。要检索您只需编写的类型,并从您的意图附加内容中读取它。
由于您似乎在为所有活动使用相同的BaseModule
,因此您可能希望为此创建另一个模块。