2012-03-09 16 views
14

Czy ktoś może podać szybki przykład, jak zmienić zawartość paska działań Aktywność na podstawie czegoś, co ma miejsce w fragmencie? Moim zamiarem:Android: Zmiana elementów menu paska zadań z fragmentu

Zwykłe pozycje menu -> Coś we fragmencie zostanie przeniesiony -> elementy menu zmieni się zapisać/usunąć przyciski.

Mój pierwszy impuls jest ustawienie Broadcast odbiorników zarówno w działalności i fragment przekroju do rozmowy, ale nie jestem pewien, czy to jest prawidłowe.

Odpowiedz

7

Następujące prace dla mnie. Mam niestandardowej klasy, która implementuje ListView.MultiChoiceModeListener wewnątrz Fragment:

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
    // Choose the correct Action Bar menu to display 
    int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2; 

    // Configure to use the desired menu 
    mode.getMenu().clear(); 
    MenuInflater inflater = getActivity().getMenuInflater(); 
    inflater.inflate(menu); 
} 

biorąc pod uwagę jak wykryć „coś we fragmencie został przeniesiony”, rozszerzając ListView.MultiChoiceModeListener nie może pracować dla Ciebie, ale mam nadzieję, że ten ilustruje, jak zmienić menu. Kluczem jest uzyskanie dostępu do instancji ActionMode.

+0

Gdzie można uzyskać instancje ActionMode na aktywność użytkownika? – Neilers

4

Myślę, że chcesz użyć contextual action mode. W zdarzeniu przeciągania zostanie uruchomiona nowa właściwość ActionMode, która może zastąpić zawartość paska akcji elementami menu specyficznymi dla tego, co użytkownik chce zrobić. Gdy użytkownik wybierze akcję, kończy się tryb działania, a pasek akcji powraca do poprzedniego stanu.

20

Fragmenty mogą zmieniać menu na pasku akcji. Do tego trzeba dodać niezbędną flagi fragment za oncreate() wykorzystaniem metody setHasOptionsMenu(true);

Gdy fragment jest załadowany dostaniesz zawijają onCreateOptionsMenu(Menu menu, MenuInflater inflater) podobnie jak działalność. Następnie wprowadź niezbędne zmiany w swoim menu.

Zapisz menu jako globalne w fragmencie, a gdy chcesz wprowadzić zmianę, zastosuj na nim.

+1

To zdecydowanie najlepsza odpowiedź. –

1

Nie wiem, czy instancja ActionBar pomogłoby z wybranego menu, ale z pewnością byłaby przydatna .. Oto sposób, aby uzyskać o nim

Spróbuj uzyskać ActionBar z FragmentActivity używając onAttach (Activity) metoda w Fragmentie.

Przede wszystkim dokonać globalny obiekt swojego FragmentActivity we fragmencie jak ten

public class YourFragment extends Fragment { 

    private YourFragmentActivity context; 
} 

przesłonić to w klasie YourFragment

@Override 
public void onAttach(Activity activity){ 
    context = (YourFragmentActivity)activity; 
    super.onAttach(activity); 
} 

Następnie w metodzie OnCreate w YourFragment zrobić

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

    android.support.v7.ActionBar actionBar = context.getSupportActionBar(); 

    ... 
} 
Powiązane problemy