好吧,实际上我不需要它是一个对话。它可能是另一种选择......我只想通知用户它的“正在加载......”
我有一个扩展 AsyncTask 的类,在另一个任务中。
onPreExecute 我想显示“正在加载...”,而 onPostExecute 我想关闭它。
我能想到的唯一方法是通过对话。
问题是,对话框需要一个上下文传递给它的构造函数,而这个类只是一个数据发送器,所以它不是一个活动。
我该怎么办?
好吧,实际上我不需要它是一个对话。它可能是另一种选择......我只想通知用户它的“正在加载......”
我有一个扩展 AsyncTask 的类,在另一个任务中。
onPreExecute 我想显示“正在加载...”,而 onPostExecute 我想关闭它。
我能想到的唯一方法是通过对话。
问题是,对话框需要一个上下文传递给它的构造函数,而这个类只是一个数据发送器,所以它不是一个活动。
我该怎么办?
你可以把它放在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...
}
从此,您有两个解决方案 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()
使用它来显示对话框..
你可以试试系统窗口
1、通过getSystemService(Context.WINDOW_SERVICE)获取WindowManager;
2、膨胀你的对话框视图
3、创建一个WindowManager.LayoutParams。小心国旗。
4、用WindowManager.addView(view, layoutparams)添加视图;
5、关闭对话框时,WindowManager.removeView(view);