2013-05-14 22 views
7

Hallo Ich habe eine DialogFragment, die Liste der Optionen für den Benutzer zeigt, eine dieser Optionen ist "Löschen" -Option, wenn der Benutzer die Löschoption drücken möchte ich leider eine andere DialogFragment als Bestätigung anzeigen Der Bestätigungsdialog wird nicht angezeigt.DialogFragment von einem anderen DialogFragment anzeigen

hier ist mein Code

erste Fragment Code

public class ContactDialogOption extends SherlockDialogFragment { 

    public static final String TAG = ContactDialogOption.class.getSimpleName(); 

    public ContactDialogOption() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     builder.setIcon(R.drawable.ic_launcher); 
     builder.setTitle(R.string.options); 

     builder.setItems(new String[] { 

     getString(R.string.call), getString(R.string.send_message), 
       getString(R.string.copy), getString(R.string.edit), 
       getString(R.string.delete) 

     }, new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
          if(which == 4) //delete 
          { 
FragmentManager mgr = getActivity().getSupportFragmentManager(); 
    FragmentTransaction ft = mgr.beginTransaction(); 
     Fragment old = mgr.findFragmentByTag("SecondFragment"); 
     if (old != null) { 
      ft.remove(old); 
     } 
     ft.addToBackStack(null); 


fragment.show(ft, fragmentTag); 
          } 
      } 
     }); 

     return builder.create(); 
    } 
} 
+0

scheint ich kann ein DialogFragment von der onClick Methode !!! – user4o01

+0

Wo instanziieren Sie das zweite Fragment, das Sie anzeigen möchten? –

Antwort

0

Dies ist der Code, der für mich funktioniert:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    if (getArguments() == null) { 
     throw new InvalidParameterException("The key types dialog needs the protocol id to be in the arguments"); 
    } 
    if (mCallback == null) { 
     throw new InvalidParameterException("The key types dialog needs an callback to be set"); 
    } 

    mProtocolId = getArguments().getInt(ApplicationConstants.FragmentsConstants.PROTOCOL_ID); 
    final List<KeyTypeEntity> allKeyTypes = BusinessFacade.getInstance(getActivity()).KeyTypeLogic.getAllKeyTypes(); 

    ArrayAdapter<KeyTypeEntity> keyTypeAdapter = new ArrayAdapter<KeyTypeEntity>(getActivity(), android.R.layout.simple_list_item_1, allKeyTypes); 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    builder.setTitle("").setAdapter(keyTypeAdapter, new OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      final KeyTypeEntity keyTypeEntity = allKeyTypes.get(which); 
      AlertDialog.Builder number = new AlertDialog.Builder(getActivity()); 

      List<String> keyNumbers = new ArrayList<String>(); 

      for (int i = 0; i < 50; i++) { 
       keyNumbers.add("" + (i + 1)); 
      } 
      ArrayAdapter<String> kAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, keyNumbers); 

      number.setTitle("").setAdapter(kAdapter, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        addNewKey(keyTypeEntity, which + 1); 
       } 
      }); 
      number.show(); 
     } 
    }).setOnCancelListener(new OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dialog) { 
      mCallback.onDialogClosed(); 
     } 
    }); 

    mDialog = builder.create(); 
    return mDialog; 
} 

In dem ersten Klick-Handler Ich erstelle gerade einen neuen Dialog und Zeig es. Dadurch wird der erste Dialog geschlossen, der zweite geöffnet, und wenn der Benutzer auf einen Eintrag in der Liste klickt, wird der zweite Klick-Handler aufgerufen.

hoffe, das hilft, und ich bin nicht zu spät :)

+0

Ich verstehe es nicht wirklich ... warum post-to-Code von Ihrem Projekt, das nichts mit der Frage hat? Es verwirrt nur Anfänger Geist –

6

ich genau das gleiche Problem bekam, diese Situation nicht passieren, wenn Sie versuchen, eine DialogFragment von einem Fragment zu öffnen.

Die einzige Lösung, die ich fand, war, den folgenden Aufruf zu ändern:

fragment.show(ft, fragmentTag); 

An:

fragment.show(getFragmentManager(), fragmentTag); 

Das Problem bei dieser Lösung besteht darin, dass wir auf den FragmentTransition nicht arbeiten können.

Ich verstehe nicht, warum das Verhalten anders ist als mit den Fragmenten.

2

Ich stieß auf das gleiche Problem, dass ich kein anderes DialogFragment innerhalb der positiven und negativen Klick-Listener des ersten DialogFragments anzeigen konnte. Meine Lösung bestand darin, das erste Fragment sofort zu öffnen, wodurch das zweite DialogFragment erfolgreich angehängt und angezeigt werden kann.

// Call this before adding the second dialog fragment activity.getSupportFragmentManager().popBackStackImmediate();

2

Bitte überprüfen Sie diesen folgenden Code ein. Hoffe, das wird vielen von euch helfen!

public class SubcategoryFragment extends DialogFragment { 

public SubcategoryFragment() { 

} 

public static SubcategoryFragment newInstance(Integer code, String name) { 
    SubcategoryFragment fragment = new SubcategoryFragment(); 

    mCode = code; 
    mTitle = name; 
    return fragment; 
} 


@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    liststring = new ArrayList<>(); 

    getAdapter(); 

} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_subcategory, container, false); 
    gridView = (GridView) view.findViewById(R.id.sub_grid); 


    return view; 

} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    closeDialog = (ImageView) getDialog().findViewById(R.id.closeDialog); 
    title = (TextView) getDialog().findViewById(R.id.dialogTitle); 
    gridView = (GridView) getDialog().findViewById(R.id.sub_grid); 

    title.setText(String.format("Choose %s", mTitle)); 
    closeDialog.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getDialog().dismiss(); 
     } 
    }); 


} 

@Override 
public Dialog onCreateDialog(@NonNull Bundle savedInstanceState) { 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 


    // request a window without the title 
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

    // closeDialog = (ImageView) dialog.findViewById(R.id.closeDialog); 

    return dialog; 

} 



public void getAdapter() { 

     gridAdapter = new HomeSubGridViewAdapter(getContext(), R.layout.gridview_custom_layout, liststring); 
     gridView.setAdapter(gridAdapter); 

} 


} 

Dies ist die Methode Dialog von Fragment

fragmentManager = ((FragmentActivity) context).getSupportFragmentManager(); 
        SubcategoryFragment postalFragment = SubcategoryFragment.newInstance(Integer.valueOf(item.getId()), item.getName()); 
        postalFragment.show(fragmentManager, "SubcategoryFragment"); 

Fühlen Sie sich frei für den Aufruf, wenn Sie irgendein Problem fühlen zu fragen, ist, dass

0

Sie FragmentManage-newInstance() Methode erster DialogFragment Sie passieren kann dann kann es verwenden, um neue dialogfragment zu zeigen, das ist mein Code.

0

In letzter Zeit hatte ich dieses Problem und keine der oben genannten Optionen funktionierte für mich. Ich habe versucht, das Verfahren unter Verwendung von unten:

DialogFragment fragment = new MyFragment(); //where MyFragment is my fragment I want to show 
fragment.setCancelable(true); 
fragment.show(getSupportFragmentManager(), "timePicker"); 

Dies wird NUR Arbeit, wenn Sie diese in einer Aktivität (i verwenden.e um ein Dialogfragment aus einer Aktivitätsklasse aufzurufen.

Ich reparierte diese jedoch durch meine Tätigkeit Instanz in eine AppCompat Aktivität einziehenden und mit getSupportFragment() nennen, wie unten dargestellt:

DialogFragment timeFragment = new TimePicker(); 
timeFragment.setCancelable(true); 
AppCompatActivity activity = (AppCompatActivity) getActivity(); 
timeFragment.show(activity.getSupportFragmentManager(), "timePicker"); 

Ich hoffe, das hilft .. Frohe Codierung !!

Verwandte Themen