Android:没有活动的类中的警报对话框

时间:2011-08-16 11:10:24

标签: android android-activity alertdialog

我有这堂课:

public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

ImageFromWeb ifw;
private String url;
private final WeakReference<ImageView> imageViewReference;

public DownloadImageTask(ImageView imageView) {
    imageViewReference = new WeakReference<ImageView>(imageView);
}

@Override
protected Bitmap doInBackground(String... params) {
    url = params[0];
    try {
        return BitmapFactory.decodeStream(new URL(url).openConnection().getInputStream());
    } catch (MalformedURLException e) {
        e.printStackTrace();
        return null;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

@Override
protected void onPostExecute(Bitmap result) {
    if (isCancelled()) {
        result = null;
    }
    if (imageViewReference != null) {
        ImageView imageView = imageViewReference.get();
        if (imageView != null) {
            imageView.setImageBitmap(result);
        }
    }
}

@Override
protected void onPreExecute() {
    if (imageViewReference != null) {
        ImageView imageView = imageViewReference.get();
        if (imageView != null) {
 ---------> imageView.setImageResource(R.drawable.pw);     
        }
    }
}

}

和主要活动:

public class ImageFromWeb extends Activity {

private String path = "http://....";
private ImageView imageView;

public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.main);

    ImageView mChart = (ImageView) findViewById(R.id.imview);

    mChart.setTag(path);
    new DownloadImageTask(mChart).execute(path);
}

}

我想在箭头(在DownloadImageTask类中)放置一个警告对话框!我怎样才能做到这一点?因为这个类不是活动。

谢谢:)

4 个答案:

答案 0 :(得分:4)

更改构造函数并传递Context对象

Context mContext;
public DownloadImageTask(ImageView imageView,Context mContext) {
    imageViewReference = new WeakReference<ImageView>(imageView);
    this.mContext = mContext;
}

现在您可以使用此 上下文 来创建对话框

您甚至可以将mContext投射到您的Activity类并调用Activity

中的函数

答案 1 :(得分:0)

将Async Task移动到您的活动中并使用它来调用您的DownloadImageTask类&amp;方法。这将使您的生活更轻松。

答案 2 :(得分:0)

将Activity实例传递给要显示对话框的类,然后选中

if(!actvity.isFinishing){
//show dialog
}

答案 3 :(得分:0)

您可以在应用程序中拥有静态上下文,如下所示:

public static Context CurrentContext;

和一个自定义抽象Activity,在创建时设置currentContext,如下所示:

public abstract class CustomActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyApplication.CurrentContext = this;
    }
}

然后你会得到这样的背景:

AlertDialog.Builder dlgBuilder = new AlertDialog.Builder(MyApplication.CurrentContext);
                    dlgBuilder.setTitle("Context Example");
                    dlgBuilder.setMessage("I am being shown from the application Static context!");
                    dlgBuilder.setNeutralButton("Ok", null);
                    dlgBuilder.show();

通过这种方式,您无需担心上下文,无论您是在后台任务中还是直接在一个Activity中,它都适用于大多数情况。

希望这有帮助!