0

我有两个课程,一个显示图像,下一个仅在背景中加载图像,但问题是第二个课程需要setProgressBarIndeterminateVisibility(false)从第一个课程开始,我不知道该怎么做。

我的第一堂课:

public class Galeria extends Activity {

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

    setContentView(R.layout.activity_galeria);

    setProgressBarIndeterminateVisibility(true); 
    ...
}

我的第二课:

public class CargarImagenes extends AsyncTask<Object, Bitmap, Object> {

protected Object doInBackground(Object... params) {

other operations...
}

protected void onPostExecute(Object result) {
    Galeria galeria = new Galeria();


    // This is the problem!!
    galeria.setProgressBarIndeterminateVisibility(false);
}
4

4 回答 4

1

来自画廊

new CargarImagenes().execute(this);

在 CargarImagenes

public class CargarImagenes extends AsyncTask<Object, Bitmap, Object> {

    Context context;

    protected Object doInBackground(Object... params) {
        context = (Context) params[0];
    other operations...
    }

    protected void onPostExecute(Object result) {
        Galeria galeria = new Galeria();


        ((Activity)context).setProgressBarIndeterminateVisibility(false)
    }

}   
于 2013-02-22T11:43:13.893 回答
0

当你把 Galeria galeria = new Galeria(); 在您的第二堂课中,您正在制作一个新的 Galeria 实例。您需要获取您在第一堂课中创建的 Galeria。

尝试这样做:(将公共更改为私有)并将代码插入您的第一堂课。

private class CargarImagenes extends AsyncTask<Object, Bitmap, Object> {

protected Object doInBackground(Object... params) {

other operations...
}

protected void onPostExecute(Object result) {
    //Galeria galeria = new Galeria();


// This is the problem!!
pb.setProgressBarIndeterminateVisibility(false);

}

其中 pb 是您的 ProgressBar。

像 public ProgressBar pb 一样放在第一类;

并做类似
pb= new ProgressBar(this); ……

于 2013-02-22T11:38:36.470 回答
0

您可以使用总线类或库,例如Otto form Square 或来自 Guava 的Bus 。他们可以在每个注册的课程中相互交流。在他们的网页上阅读更多关于它的信息。

于 2014-01-06T16:20:05.590 回答
0

如果您可以使用 Wea​​kReference 从 AsyncTask 中引用对象会更好,因为这是防止您访问空对象的可靠方法。

public class CargarImagenes extends AsyncTask<Void, Bitmap, Object> {

    WeakReference<Activity> mActivity;

    public CargarImagenes(Activity activity){

         mActivity = new WeakReference<Activity>(activity);
    }

    protected Object doInBackground(Void... params) {

        other operations...
    }

    protected void onPostExecute(Object result) {

        Activity activity = mActivity.get();
        if(activity != null){    
            activity.setProgressBarIndeterminateVisibility(false);
        }
    }    
}

然后你可以像这样创建 CargarImagenes

CargarImagenes task = new CargarImagenes(this);

并执行它。

于 2014-04-28T21:01:01.417 回答