【发布时间】:2014-03-26 23:16:29
【问题描述】:
所以我有一个看法:
public class RadialMenuWidget extends View
我想从哪里开始一个线程,就像我从一个活动开始一样
String urlInput = "http://myserver.com/"+mynewfile;
DownloaderThread downloaderThread = new DownloaderThread(UpdateActivity, urlInput);
downloaderThread.start();
但我在“DownloaderThread(UpdateActivity,...”这一行更具体地在活动名称 (UpdateActivity) 上收到消息“预期表达式”,即使我在小部件中导入了活动。
我可以做些什么来避免这种情况,同时仍然能够调用线程。
我的想法是,我使用 RadialMenuWidget,并在 RadialMenuWidget 类中测试以查看按下了哪个菜单按钮,并据此决定下一步该做什么。调用其他意图工作得很好,但现在我想开始使用单独的线程下载文件(我可以从常规活动的 onButtonClick 调用)
编辑 所以我的radialMenu有这样的结构:
public class RadialMenuWidget extends View {
...
public interface RadialMenuEntry {
...
}
public RadialMenuWidget(Context context) {
...
}
@Override
public boolean onTouchEvent(MotionEvent e) {
...
if (state == MotionEvent.ACTION_UP) {
...
if (menuEntries.get(i).getName() == "Update now") {
String urlInput = "http://myhost.com/"+mynewfile;
DownloaderThread downloaderThread = new DownloaderThread(this.UpdateActivity, urlInput);
downloaderThread.start();
}
}
...
DownloadThread 类如下所示:
public class DownloaderThread extends Thread {
public DownloaderThread(UpdateActivity inParentActivity, String inUrl)
{
downloadUrl = "";
if(inUrl != null)
{
downloadUrl = inUrl;
}
parentActivity = inParentActivity;
}
@Override
public void run()
{
// does the download
}
...
}
请帮忙。
谢谢
【问题讨论】:
-
“DownloaderThread”的签名是什么。
UpdateActivity是名称而不是参考。 -
我添加了更多代码(已编辑),以便您更好地查看。请解释我应该做什么以及为什么。谢谢
-
确实,我曾经从 UpdateActivity 调用 DownloaderThread,但现在我想在这个 Activity 中添加 RadialMenuWidget 并从它的菜单项单击调用下载器(位于 RadialMenuWidget 类内...
-
最好把Thread放在Activity中,使用像“onClick”这样的回调来启动它。
-
就像我说的,这就是现在的方式(活动内的onclick),但我想通过点击菜单(RadialMenuWidget)github.com/strider2023/Radial-Menu-Widget-Android来调用它,因为我开始将项目更改为使用小部件,从使用径向菜单跳转到内部带有按钮的空活动看起来并不酷