【发布时间】:2016-12-30 05:15:43
【问题描述】:
我需要在模型中使用活动上下文,同时在 android 中使用 MVP 来获取所有已安装应用程序的列表。在遵循 MVP 模式的同时访问上下文的正确方法是什么或实现相同的任何替代方法.
以下是课程:
主Activity.java
public class MainActivity extends BaseActivity
implements MainView,View.OnClickListener {
private MainPresenter mPresenter;
private Button sendButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
createPresenter();
}
private void init(){
sendButton= (Button) findViewById(R.id.button_send);
sendButton.setOnClickListener(this);
}
private void createPresenter() {
mPresenter=new MainPresenter();
mPresenter.addView(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button_send:
mPresenter.onSendButtonClick();
break;
}
}
@Override
public void openOptionsActivity() {
Intent intent=new Intent(this,OptionsActivity.class);
startActivity(intent);
}
}
Main Presenter.java
公共类 MainPresenter 扩展 BasePresenter { MainModel model;
public void onSendButtonClick() {
model.getListOfAllApps();
}
@Override
public void addView(MainView view) {
super.addView(view);
model = new MainModel();
}
}
主模型.java
public class MainModel {
public void getListOfAllApps(){
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0);
}
}
在getPackageManager().queryIntentActivities(mainIntent, 0) 中遇到问题。如何在此处没有任何上下文。
【问题讨论】:
-
你没有
Application class吗? -
我有应用程序类。但是如何使用它。你是说在应用程序类中使用一些常量字段作为上下文吗?问题是按照我们不应该使用任何特定于android的模式模型中的类/对象。
-
一点也不。只需在 onCreate(...) 中创建 applicationContext 并使用它
-
我有一个 MainActivity、一个 MainPresenter 和一个 MainModel 类。现在我需要访问 Model 中的上下文。在活动的 oncreate 中 applicationcontext 有什么用?
-
@MD 你完全错过了在这里使用 MVP 来分离关注点的意义。由于 Model 包含业务逻辑,它应该与框架无关,这意味着它不应该直接依赖于 Android 特定对象,例如 Context