Hallo Gemeinde,
ich bin dabei ein altes Projekt aufzumöbeln. Es sind ca. 25 Dialoge enthalten. In den einzelnen Activitys sind diese auch wunderbar untergebracht, läuft aber so heute nicht mehr.
Problem: "showDialog" wird als deprecated gekennzeichnet.
// Aufruf:
public void onClickChecklistEintragLoeschen(final View sfNormal) {
showDialog(ZeileLoeschenWarnungDialog); // leider jetzt deprecated ---
}
//der bisherige Dialog:
protected Dialog onCreateDialog(int id) {
switch (id) {
case ZeileLoeschenWarnungDialog:
return new AlertDialog.Builder(getParent())
.setMessage(R.string.Txt_Dialog_Loeschen_Warnung)
.setCancelable(false)
.setPositiveButton(R.string.Button_Loeschen, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
EintragLoeschen(0); // void zum Satz Löschen
}
})
.setNegativeButton(R.string.Button_Abbrechen, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
})
.create();
case SortierDialog:
return new AlertDialog.Builder(getParent())
.setTitle(R.string.Txt_Dialog_Sortieren)
.setItems(R.array.Sortierung_Orte, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
dialog.cancel();
SortierFunktion(item);
}
})
.create();
}
return null;
}
Alles anzeigen
Wie zu sehen sind hier eigentlich zwei Dialoge in der Activity möglich.
Okay, habe einen Dialog über DialogFragment gebildet. Funktioniert tadellos, auch mit Datenübergabe. Mein DialogFragment sieht so aus:
// der Aufruf aus einem Fragmengt
buttonLoeschen = view.findViewById(R.id.Button_Loeschen);
buttonLoeschen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Dialog zum Löschen starten
openDialog_Delete();
}
});
private void openDialog_Delete(){
DialogFragment newFragment = new MyDialogFragment();
newFragment.show( getActivity().getSupportFragmentManager(), "taskdelete");
}
//--------------------------------------------------------------------------------------------------------------------------
// der Dialog im DialogFragment
public class MyDialogFragment extends DialogFragment {
private MyDialogListener listener;
public static final String Tag = "taskdialog";
//widgets
private TextView mActionOk, mActionCannel;
public String dataGet, dataRecieve, switchDialog;
public interface MyDialogListener {
void backData(Integer i);
}
// es wird zurückgegeben, ob gelöscht werden soll, das "sort" ist eigentlich als 2. Dialog geplant
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
getParentFragmentManager().setFragmentResultListener("checklistFragment", this, new FragmentResultListener() {
@Override
public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
dataRecieve = result.getString("loeschen");
//dataRecieve = result.getString("sort");
}
});
// if und switch scheint nicht zu gehen, da parralel zwei Aktionen, der Dialog und Resultübergabe, d.h. Text "loeschen" usw.
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.Txt_Dialog_Loeschen_Warnung)
.setCancelable(false)
.setPositiveButton(R.string.Button_Loeschen, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Bundle result = new Bundle();
// an F_checklist wird delete zurückgegeben !
result.putString("delete", "delete");
getParentFragmentManager().setFragmentResult("dialogFragment", result);
}
})
.setNegativeButton(R.string.Button_Abbrechen, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
return builder.create();
}
}
Alles anzeigen
Eine CASE-Schachtelung wie vorher bekomme ich nicht hin. Muss ich jetzt für jedes CASE ein eigenes DialogFragment eröffnen ?
Oder ist es weiterhin sinnvoll, die Dialoge einzeln in der jeweiligen Activity/Fragment situationsbedingt auszuführen ?
Hat jemand einen Hinweis , wie man am besten vorgeht ?
Danke Wolfgang