19

Próbuję utworzyć widok stron, który przesuwa się po 3 różnych fragmentach, każdy za pomocą innego paska narzędzi. I wprowadziły nowy pasek narzędzi w działalności przed i dostał go do pracy jednak staram się zmusić go do pracy z fragmentamiKorzystanie z paska narzędzi z fragmentami

Oto fragment kodu

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout resource that'll be returned 
    View rootView = inflater.inflate(R.layout.fragment_home, container, false); 


    mToolbar = (Toolbar) rootView.findViewById(R.id.toolbar_home); 
    if (mToolbar != null) { 
     setSupportActionBar(mToolbar); 
    } 
    mToolbar.setTitle(null); 

    return rootView; 
} 

mam rozszerzenie mój fragment z Fragment, jednak otrzymuję błąd

Cannot resolve method setSupportActionBar 

nie jestem pewien, jak rozwiązać ten problem, jeśli usunąć kod setSupportActionBar będzie przestać działać z niektórymi urządzeniami? Dzięki

+0

Czy jest problem związany z jego zawartością w układzie działania i ustawieniem go w działaniu? – tachyonflux

+0

każdy pasek narzędzi dla każdego stron podglądu będzie miał inny kolor i różne menu, więc pomyślałem, że lepiej będzie je kontrolować za pomocą fragmentów –

+0

Trzymaj się, nie jest to cały punkt w tym scenariuszu * nie *, aby ustawić 'ToolBar' jako "ActionBar"? Ponieważ twoim zamiarem jest, aby każdy fragment miał własny "ToolBar" (który przesuwa się wraz z inną zawartością fragmentu), mówimy o ['standalone'] (http://android-developers.blogspot.nl/2014/10/appcompat-v21-material-design-for-pre.html) (przewiń w dół do sekcji "samodzielny") użycia widżetu. –

Odpowiedz

47

Fragments nie ma takiej metody setSupportActionBar(). ActionBar jest właściwością działalności, tak aby ustawić pasek jako actionBar Twoja aktywność powinna rozciągać się od ActionBarActivity i wtedy można wywołać w swojej Fragment:

((ActionBarActivity)getActivity()).setSupportActionBar(mToolbar); 

UPDATE

Jeśli używasz AppCompatActivity:

((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar); 
+1

W moim przypadku to nie zastępuje paska akcji Mainactivity, ale nadaje Toolbarowi tytuł podobny do Mainactivity. – Roel

+2

@vinitius Hej w powyższej odpowiedzi zapomniałeś napisać "()" po getActivity. więc dodaj to, aby inni nie wpadli w zakłopotanie. –

+0

Przeniesienie SupportActionBar z paska narzędziowego Activity na pasek narzędzi Fragments może utracić obsługę paska narzędzi Activity. co się stanie, jeśli musisz zaktualizować pasek narzędzi Działania po znalezieniu fragmentu z przesuniętą wersją SupportActionBar? :). –

8

Dzięki nowej AppCompatActivity należy nazwać zamiast ActionBarActivity:

((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); 
0

Możesz dodać pasek we fragmentach za pomocą tego

((YOUR_ACTIVITY) getActivity()).getDelegate().setSupportActionBar(toolbar); 
4

Widziałem wiele odpowiedzi wymieniających się setSupportActionBar na pasku wewnątrz Fragment ale takie podejście może się nie udać, jeśli masz aa pasek w Activity i oddzielny Toolbar w Fragment.

  1. Jak przesunąć setSupportActionBar z paska narzędzi do paska Działania związane jest fragment, można zmierzyć powielania MenuItem nawet spróbować zastąpić stosując setHasOptionsMenu(true).
  2. Po drugie Jeśli chcesz zaktualizować pasek narzędzi aktywności, zobaczysz, że twoje zmiany nie zostały odzwierciedlone z powodu setSupportActionBar w Twoim Fragmentie.

Tak więc w celu uniknięcia tego polecam stosowanie metod paska narzędzi jak to wewnątrz fragmentu do menu nadmuchać i używać

toolbar = (Toolbar) view.findViewById(R.id.toolbar_frag); 
    toolbar.inflateMenu(R.menu.frag_menu_items); 
    Menu menu = toolbar.getMenu(); 

i używać Toolbar.OnMenuItemClickListener interfejs do odbioru z elementów menu kliknij wydarzenia.

+0

Cześć Faisal Naseer, możesz wyjaśnić to szczegółowo, ponieważ stoisz w obliczu tego samego problemu, który opisujesz. –

+0

na pewno, na czym problem polega na tym, że próbowałeś powyższego podejścia. –

+1

Rozwiązałem problem przy użyciu Twojego kodu przez RND, dziękuję za twoją opinię. W rzeczywistości mam tylko jedną aktywność i resztę wszystkich fragmentów w mojej aplikacji. Aktualizowanie paska narzędzi z menu opcji w każdym fragmencie powoduje problem. Ale z twoim kodem działa dobrze Dziękuje. –

Powiązane problemy