如何注入一个变量取决于两个不同的用例?

How to inject one variable depends on two different use cases?

情况是我需要在我的 Activity 中注入一个变量(它将是 ViewModel),我可以通过两次不同的按钮按下来实现:

我们按下哪个按钮并不重要,两者都会将我们带到另一个 activity,但 ViewModel 会根据按钮执行不同的工作。

我想知道如何在构造函数或其他选项中放置标志的有效方法。

这是我的代码(基础Activity):

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

Activity 与 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);
}

@Module用于提供依赖。如果您在 2 个不同的用例中重复使用相同的活动,那么模块就是您需要更改的东西。

只需将 intenum 参数添加到您的 Module 构造函数并传入要使用的类型(加法或减法)。要检索类型,您只需编写并从 intent extras 中读取它。

由于您似乎在所有活动中使用相同的 BaseModule,您可能希望为此创建另一个模块。