2016-08-08 11 views

Antwort

1

Beim Starten des Aktionsmodus für die aktuelle Aktivität wird die Aktionsleiste hinter dem Dialogfeld angezeigt, so dass auf sie nicht zugegriffen werden kann, ohne sie zu verwerfen.
Nach mehreren Versuchen, dies zu vermeiden, habe ich einen Blick auf die source code of AppCompatActivity hatte, und schaffte es, eine Lösung zu finden (was für mich gearbeitet):

  1. ein Feld Angelegt,

    private AppCompatDelegate delegate; 
    
  2. onStart overrode wie folgt aus:

    @Override 
    public void onStart() { 
        super.onStart(); 
    
        Dialog dialog = getDialog(); 
        if (dialog != null) delegate = AppCompatDelegate.create(dialog, this); 
    } 
    
  3. und erstellt einen Aktionsmodus Starter Methode

    @Nullable 
    public ActionMode startSupportActionMode (ActionMode.Callback callback) { 
        if (delegate != null) return delegate.startSupportActionMode(callback); 
        return null; 
    } 
    

Es kann auch onCreateDialog zwingende arbeiten und die Delegierten dort zu schaffen, sondern von der Quelle der DialogFragment die getDialog Methode sollte die gleiche (aktuelle) Dialoginstanz auf onStart zurückkehren, so ist es in Ordnung, ist die Schaffung von Delegieren Sie dort.

1

Gefunden eine Antwort, die für alle API-Ebene arbeitet:

Dialog dialog; 
ActionMode.Callback actionMode; 

Window window = dialog.getWindow(); 
View toplevel = window.getDecorView(); 
if (toplevel == null) { return; } 

toplevel.startActionMode (actionMode); 

Inspiriert durch eine Antwort erstellt von MandisaW.

+0

das scheint gut zu funktionieren für api level '11 +', aber da 'startActionMode' zu' View' in '11' hinzugefügt wurde, wird es für Level darunter fehlschlagen. – trooper

+0

... also suche ich immer noch nach einem 'startSupportActionMode' aus meinem DialogFragment für ältere apis. Ich kann '((AppCompatActivity) getActivity()). StartSupportActionMode' verwenden, aber die CAB erscheint hinter dem Dialog (und ist nicht zugänglich, bis das Dialogfeld geschlossen wird). – trooper