インターネットからの情報を 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();
}
});
}
}
}