我有一个项目列表,用户可以点击下载。 我正在使用此代码:
//Maintained this in my ListAdapter class so that if user clicks on cancel download i can do:
// tasks.get(info.getFieldID()).cancel(true);
public static Map<String, Future<Object>> tasks = new HashMap<String, Future<Object>>();
Future f = downloadExecutor.submit(new Callable<Object>() {
// do downloading.
}
tasks.put(key,f);
我试图在用户点击取消时通过调用取消相应的下载 tasks.get(键).cancel(真);
但是我的任务没有被取消。
几个问题:
1)我是否通过维护适配器类中的未来对象列表而做错了什么?
2)当用户点击按钮时,我应该如何取消任务?
3)我怎么知道任务已被取消?
我已经阅读过关于ExecutorService的内容,但我对实现感到困惑。
一些帮助表示赞赏!
谢谢, 斯纳
答案 0 :(得分:0)
你真的在一起问几个问题。问题背后的逻辑似乎是将物理操作(按下按钮)与可执行操作(取消任务)连接起来。
简单来说,您似乎认识到需要存储对任务的引用才能取消它。在伪代码中(因为您的特定实现可能不同),您需要以下内容:
Button myButton = (Button)findViewById(R.id.mybutton);
myButton.setOnClickListener(new OnClickListener() {
@Override
onClick(View v) {
tasks
// retrieve the proper task based on the button
.get(oneKey)
// once you have the task, cancel it
.cancel(true);
}
});
在上面的代码中,每个按钮都与您选择的任务相关联,您可以通过硬编码或传递变量来完成。
使用哈希表,检索所需的任务。然后使用其cancel
方法取消它。