1

インターネットからの情報を 1 つの DialogFragment に表示したいのですが、次のような疑問があります。

1 - これを行うには、DialogFragment に AsynkTask を実装しますが、私のアクティビティは同時に別の AsynkTask を実行するため、dialogfragment はアクティビティから AsynkTask を完了するのを待つ必要があります。アクティビティの前にDialogFragmentからAsyncTaskを実行することは可能ですか?

2 - DialogFragment で DialogProgress を 1 つ使用しようとしましたが、アクティビティに表示されています。DialogFragment でどのようにすればよいですか?

3 - AsyncTask を使用せずに DialogFragment でインターネットから情報を参照することは可能ですか?

public class DialogFotoFragment extends DialogFragment {

private String latitude;
private String longitude;
private Handler hndl = new Handler();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.dialog_foto_ponto, container);

    // Verifica se a latitude e lngitude foram informados
    if (latitude == null || latitude.trim().length() == 0) {
        Toast.makeText(this.getActivity(),
                "Não foi possível apresentar a foto", Toast.LENGTH_LONG)
                .show();
        this.dismiss();
    }

    if (longitude == null || longitude.trim().length() == 0) {
        Toast.makeText(this.getActivity(),
                "Não foi possível apresentar a foto", Toast.LENGTH_LONG)
                .show();
        this.dismiss();
    }

    ImageView img = (ImageView) view.findViewById(R.id.fotoPonto);
    Button btn = (Button) view.findViewById(R.id.btnOKDialogFoto);

    btn.setOnClickListener(buttonOk);

    ProgressDialog pDialog = ProgressDialog.show(getActivity(), "",
            "Wait...", true);

    // Apresenta tela de aguarde
    ConsultaFotoBackGround consultaFoto = new ConsultaFotoBackGround();
    Object[] objs = new Object[3];
    objs[0] = img;
    objs[1] = this;
    objs[2] = pDialog;
    consultaFoto.execute(objs);
    return view;
}

private OnClickListener buttonOk = new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        DialogFotoFragment.this.dismiss();
    }
};

public String getLatitude() {
    return latitude;
}

public void setLatitude(String latitude) {
    this.latitude = latitude;
}

public String getLongitude() {
    return longitude;
}

public void setLongitude(String longitude) {
    this.longitude = longitude;
}

private class ConsultaFotoBackGround extends
        AsyncTask<Object, Void, Object[]> {

    private Handler hndl = new Handler();
    Drawable fotoInternet;
    ImageView img;
    ProgressDialog pDialog;

    @Override
    protected Object[] doInBackground(Object... objs) {
        img = (ImageView) objs[0];
        DialogFotoFragment classe = (DialogFotoFragment) objs[1];
        pDialog = (ProgressDialog)objs[2];

        try {
            fotoInternet = Utilities.LoadImagePonto(latitude,
                    longitude);
            showFoto();
        } catch (Exception e) {
            Toast.makeText(classe.getActivity(),
                    "Não foi possível apresentar a foto", Toast.LENGTH_LONG)
                    .show();
            classe.dismiss();
        }
        return objs;
    }

    @Override
    protected void onPostExecute(Object[] result) {
    }

    protected void showFoto() {
        hndl.post(new Runnable() {
            @Override
            public void run() {
                img.setImageDrawable(fotoInternet);
                pDialog.dismiss();
            }
        });
    }
}

}
4

1 に答える 1

1

を使用して必要な情報を取得できませんか。AsyncTaskその中に、取得したばかりのデータをonPostExecute使用して を作成できます。DialogFragment

ダイアログを適切に作成する方法については、公式ドキュメントに従ってください (カスタム レイアウトを使用する場合でも): http://developer.android.com/guide/topics/ui/dialogs.html

于 2013-09-27T20:08:56.127 に答える