如何在Android中显示非活动类的对话框?

时间:2013-11-02 11:31:16

标签: android

好吧,实际上,我不需要它成为一个对话框。它可能是一些替代方案......我只是想通知用户它的“正在加载......”

我有一个扩展AsyncTask的类,在另一个内部。

onPreExecute我想显示“正在加载...”和 onPostExecute我想解雇它。

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

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

我该怎么办?

3 个答案:

答案 0 :(得分:2)

您可以将AsyncTask放在Activity内,这样您就可以轻松获得Context

OR

如果您不想将其放在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...
}

答案 1 :(得分:1)

这就是你有两个解决方案 1.将asynctask作为活动中的内部类。

OR

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()使用它来显示对话框..

答案 2 :(得分:0)

您可以尝试系统窗口

1,使用getSystemService获取WindowManager(Context.WINDOW_SERVICE);

2,充气对话框视图

3,创建一个WindowManager.LayoutParams。小心旗帜。

4,使用WindowManager.addView(view,layoutparams)添加View;

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

WindowManager