Android: диалоговое окно оповещения в классе без активности - PullRequest
1 голос
/ 16 августа 2011

у меня есть этот класс:

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 ]

4 голосов
/ 16 августа 2011

измените конструктор и передайте Context объект

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

Теперь вы можете использовать этот Context для создания диалогов

Youможет даже привести mContext к вашему классу Activity и вызвать функции в вашем Activity

0 голосов
/ 22 апреля 2013

Вы можете иметь статический контекст в вашем приложении, например:

public static Context CurrentContext;

и пользовательское абстрактное действие, которое устанавливает 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();

Таким образом, вам никогда не придется беспокоиться о контексте, если вы находитесь в фоновой задаче или непосредственно в Деятельности, это будет работать в большинстве случаев.

надеюсь, это поможет!

0 голосов
/ 16 августа 2011

передайте экземпляр Activity в класс, в котором вы хотите отобразить диалог, и отметьте

if(!actvity.isFinishing){
//show dialog
}
0 голосов
/ 16 августа 2011

Переместите асинхронную задачу в свою деятельность и используйте ее для вызова вашего класса и методов DownloadImageTask. Это сделает вашу жизнь намного проще.

...