0

好吧,实际上我不需要它是一个对话。它可能是另一种选择......我只想通知用户它的“正在加载......”

我有一个扩展 AsyncTask 的类,在另一个任务中。

onPreExecute 我想显示“正在加载...”,而 onPostExecute 我想关闭它。

我能想到的唯一方法是通过对话。

问题是,对话框需要一个上下文传递给它的构造函数,而这个类只是一个数据发送器,所以它不是一个活动。

我该怎么办?

4

3 回答 3

2

你可以把它放在AsyncTask里面Activity,这样你就可以很容易地得到它Context

或者

如果您不想将其放入 中Activity,则可以创建一个接受Context作为参数的构造函数,然后将其存储为类变量。然后,当您调用 时AsyncTask,将调用者的Context作为参数传递。

public class MyAsyncTask extends AsyncTask<Void, Void, Void> {

    private Context mContext;

    public MyAsyncTask(Context context){
        mContext = context;
    }

    // the rest of the code...
}
于 2013-11-02T13:38:03.900 回答
1

从此,您有两个解决方案 1.将 asynctask 作为活动中的内部类 ..

或者

2.如下创建类并在项目中的任何地方使用上下文..

public class ApplicationContext extends Application {

/** Instance of the current application. */
private static ApplicationContext instance;

/**
 * Constructor.
 */
public ApplicationContext() {
    instance = this;
}

/**
 * Gets the application context.
 * 
 * @return the application context
 */
public static Context getContext() {
    if (instance == null) {
        instance = new ApplicationContext();
    }
    return instance;
}
}

在清单中提到它android:name="com.afbb.activitys.ApplicationContext"

并获取上下文以ApplicationContext.getContext()使用它来显示对话框..

于 2013-11-02T11:41:10.873 回答
0

你可以试试系统窗口

1、通过getSystemService(Context.WINDOW_SERVICE)获取WindowManager;

2、膨胀你的对话框视图

3、创建一个WindowManager.LayoutParams。小心国旗。

4、用WindowManager.addView(view, layoutparams)添加视图;

5、关闭对话框时,WindowManager.removeView(view);

窗口管理器

于 2013-11-02T11:51:39.583 回答