나는 Dialog와 ProgressDialog라는 private 속성으로 2 개의 대화 상자가있는 Overlay 확장 기능을 가지고 있습니다. MapView에서 오버레이를 클릭하면 Dialog 객체가 나타납니다. 사용자가 대화 상자에서 단추를 클릭하면 해당 단추가 사라지고 ProgressDialog가 표시됩니다. 동시에 백그라운드 태스크는 실행중인 서비스에 알리는 것으로 시작됩니다. 작업이 완료되면 Overlay 개체의 메서드 (buildingLoaded)가 호출되어 View가 전환되고 ProgressDialog가 닫힙니다. 보기가 전환되고 코드가 실행 중이지만 (디버거를 사용하여 검사 한) ProgressDialog가 닫히지 않습니다. hide() 및 cancel() 메서드도 시도했지만 아무 것도 작동하지 않습니다. 누군가 나를 도울 수 있습니까? 안드로이드 버전은 여기해제, 숨기기 또는 취소를 실행 한 후에 ProgressDialog가 사라지지 않습니까?
2.2 코드입니다 :
public class LODOverlay extends Overlay implements OnClickListener {
private Dialog overlayDialog;
private ProgressDialog progressDialog;
..............
@Override
public void onClick(View view) {
.......
final Context ctx = view.getContext();
this.progressDialog = new ProgressDialog(ctx);
ListView lv = new ListView(ctx);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ctx, R.layout.layerlist, names);
lv.setAdapter(adapter);
final LODOverlay obj = this;
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String name = ((TextView) view).getText().toString();
Intent getFloorIntent = new Intent(Map.RENDERER);
getFloorIntent.putExtra("type", "onGetBuildingLayer");
getFloorIntent.putExtra("id", name);
view.getContext().sendBroadcast(getFloorIntent);
overlayDialog.dismiss();
obj.waitingForLayer = name;
progressDialog.show(ctx, "Loading...", "Wait!!!");
}
});
.......
}
public void buildingLoaded(String id) {
if (null != this.progressDialog) {
if (id.equals(this.waitingForLayer)) {
this.progressDialog.hide();
this.progressDialog.dismiss();
............
Map.flipper.showNext(); // changes the view
}
}
}
}
overlayDialog를 만들거나 표시하는 위치를 표시하지 않습니다. overlayDialog가 동일한 대화 상자를 참조하고 있습니까? – Falmarri
스레딩에 대해 약간 모호합니다. 백그라운드 작업을 시작할 때 AsyncTask를 사용하고 있습니까? 'buildingLoaded'가 호출 된 AsyncTask는 있습니까? 그건 효과가 없을거야. –
overlayDialog가 정상적으로 작동합니다. progressDialog가 문제입니다. – Martin