好吧,实际上,我不需要它成为一个对话框。它可能是一些替代方案......我只是想通知用户它的“正在加载......”
我有一个扩展AsyncTask的类,在另一个内部。
onPreExecute我想显示“正在加载...”和 onPostExecute我想解雇它。
我能想到的唯一方法是通过对话框。
问题是,对话框需要传递给它的构造函数的上下文,而这个类只是一个数据发送器,所以它不是一个活动。
我该怎么办?
答案 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);