2012-06-12 36 views
0

我知道它应该是上下文。 但是,上下文究竟是什么。 通常当我在一类 创建一个对话框我做这样的事情:对话构造函数里面的东西

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

以下是两种方法可以从正在执行你的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类的私有上下文变量中,然后在doInBackground()函数中访问它。

+0

。 –

+0

我可以通过执行pTask.execute()来执行; –

+0

是的,我已经包含了一个OR,它表示两种解决方案中的任何一种,但不是同时存在。如果你使用第一个选项,那么你可以使用'pTask.execute()'。希望答案是有帮助的。 –

0

为了增加萨米尔的答案

修改代码以具有构造函数调用采取类的上下文。

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();

创建的第一个选项后
+0

似乎接受ActivityName.class,而是接受ActivityName.this。不知道差异..只是让你知道。再次感谢您的帮助 –

+0

哦,对不起...应该是活动名。这个..我更新了我的答案。同样接受答案,这对其他有类似问题的人会有所帮助。 –

+0

现在没有任何编译错误,但对话框不会显示出来......也许我需要在某处使用runOnUiThread()? –

相关问题