0

私は2つのクラスを持っています。1つは画像を表示し、次はバックグラウンドで画像をロードするだけですが、問題は、2番目のクラスが最初のクラスsetProgressBarIndeterminateVisibility(false)から実行する必要があることです。

私のファーストクラス:

public class Galeria extends Activity {

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

    setContentView(R.layout.activity_galeria);

    setProgressBarIndeterminateVisibility(true); 
    ...
}

私の2番目のクラス:

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();を置くと 2番目のクラスでは、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です。

publicProgressBarpbのようなファーストクラスに入れてください。


そして、 pb = new ProgressBar(this);のようなことをします。...。

于 2013-02-22T11:38:36.470 に答える
0

Ottoフォーム Square やBusグアバなどのバス クラスまたはライブラリを使用できます。登録されたクラスごとに相互に通信できます。詳細については、彼らの Web ページを参照してください。

于 2014-01-06T16:20:05.590 に答える
0

WeakReference を使用して AsyncTask からオブジェクトを参照できるとよいでしょう。これは、null オブジェクトへのアクセスを防止する堅牢な方法だからです。

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 に答える