我知道它应该是背景。 究竟是什么语境。 通常我在课堂上创建一个对话框 我做这样的事情:
final Dialog dialog = new Dialog(this);
但现在我正在尝试在AsyncTask中创建一个对话框<> 因此我无法做到上述原因AsyncTask显然不是一个上下文。 AsyncTask本身就是一个类,也就是说它现在不是一个子类。
public class popTask extends AsyncTask<Void, Void, String> {
Context con =
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
final Dialog dialog = new Dialog(con);
dialog.setContentView(R.layout.custom);
dialog.setTitle("New & Hot advertise");
// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.yoda);
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
}
答案 0 :(得分:0)
以下是从执行AsyncTask的活动中发送上下文的两种方法:
popTask pTask = new popTask(mContext); //OR
pTask.execute(mContext);
在popTask
中创建一个私人变量,您可以在其中设置上下文。
在第一个选项中,您需要为您正在接受上下文的类popTask
创建一个构造函数。
对于第二个选项,如果您没有向函数doInBackground()
传递任何有意义的内容,则可以更改以下行:
public class popTask extends AsyncTask<Object, Void, String>
protected Object doInBackground(Object... params) {
this.mContext = (Context) params[0];
}
您将收到doInBackground()
中的上下文对象,您可以在popTask
类的私有Context变量中设置该对象,然后在doInBackground()
函数中访问它。
答案 1 :(得分:0)
添加到Samir的答案
修改代码,使其具有构造函数,该构造函数接受调用类的上下文。
public class popTask extends AsyncTask<Void, Void, String> {
private Context context;
public popTask(Context context)
{
this.cotext=context;
}
然后Dialog dialog = new Dialog(context);
在你的调用活动中,像这样调用这个Asynctask
new popTask(ActivityName.this).execute();