android - Android MVP,获取剪贴板数据时同样的旧上下文问题?
问题描述
所以我需要在presenter中获取剪贴板数据。这意味着我需要context
. 不幸的是,如果它是唯一的标准方式,我对依赖注入一无所知。我研究了一些解决方案,但它们被称为错误的解决方案。
public class MainActivityPresenter implements MainActivityInterfaces.MainToPresenter {
MainActivityInterfaces.PresenterToMain main;
public MainActivityPresenter (MainActivityInterfaces.PresenterToMain main) {
this.main = main;
}
@Override
public void processUrl() {
String url = Utils.getClipboardData(context);
if (url.isEmpty()) {
} else {
}
}
}
这是 Utils 类中的方法
public static String getClipboardData (Context context) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager cm = (android.text.ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
String result = cm.getText().toString();
return result==null?"":result;
} else {
ClipboardManager cm = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData.Item item = cm.getPrimaryClip().getItemAt(0);
if (item != null)
return item.getText().toString();
else
return "";
}
}
解决方案
正确的方法,演示者不应该知道任何特定的 Android 元素,ClipboardManager
或者Context
(即:它应该是纯 Java)。剪贴板逻辑应该发生View
在Presenter
.
丑陋的方式,如果要继续这个设计,processUrl
应该带Context,想必这个方法是从视图中调用的吧?这就是可以提供上下文的地方。
@Override
public void processUrl(Context context) {
String url = Utils.getClipboardData(context);
if (url.isEmpty()) {
} else {
}
}
在视图中:
presenter.processUrl(getApplicationContext());
另一种解决方案是向演示者询问视图的上下文:
@Override
public void processUrl() {
final Context context = view.getContext();
String url = Utils.getClipboardData(context);
if (url.isEmpty()) {
} else {
}
}
//In the view
void Context getContext() {
return getApplicationContext();
}
推荐阅读
- scala - 以编程方式从 Google 电子表格中删除空单元格以避免 5000000 单元格限制错误
- web - 在 IE11 的 Web Worker 中使用 URL.createObjectURL
- python - 计算数据框中列表中每个单词的单词频率
- pandas - 在熊猫中使用 groupBy 后每月对数据进行排序
- python-2.7 - ld 在arch linux上构建时找不到与python模块相关的函数
- java - ListView 以编程方式添加列
- spring-data-jpa - JPA 存储库本机查询忽略 ::timestamptz
- haskell - `[ (x !! 0, x !! 1) | x <- mapM (const ['A', 'B', 'C'] ) [1..2], head x < head (tail x) ]` 有效吗?
- python - 使用 Python ElementTree 和 minidom 漂亮地打印 XML 时禁用转义
- excel - 从链接地址复制工作簿并将其粘贴到范围地址