gpt4 book ai didi

java - 如何注入(inject)一个变量取决于两种不同的用例?

转载 作者:行者123 更新时间:2023-12-01 10:30:54 25 4
gpt4 key购买 nike

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

  • 橙色按钮 - 是减法
  • 绿色按钮 - 是添加

enter image description here

无论我们按下哪个按钮,都会引导我们进入另一个 Activity ,但 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 的 Activity :

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 个不同的用例中重用相同的 Activity ,则您需要更改模块。

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

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

关于java - 如何注入(inject)一个变量取决于两种不同的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35103844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com