2012-07-07 15 views
10

Dodałem tarczy do mojego ActionBar stosując drugą opcję z odpowiedzi here.Dodawanie tarczy do ActionBar (nie Nawigacji

Jak dodać adapter pokrętła do turbinki? Próbowałem za pomocą obiektu Spinner jak Google opisuje here, ale otrzymasz obiekt zerowy Spinner:

Ktoś wie, jak to zrobić? Nie chcę, aby tarcza znajdowała się w obszarze nawigacji na pasku akcji, ale w innych elementach akcji (używam podziału pasek akcji)

Dzięki za pomoc!

Odpowiedz

6

Odrzuciłem pomysł Spinnera na użycie podmenu. Zdałem sobie sprawę, że spinner był do wyboru rzeczy, które pozostały wybrane; podmenu oznaczone jako lepsze dopasowanie interfejsu.

Dzięki i tak.

P.S. Jestem tutaj nowy. Jeśli odpowiedź na moje własne pytanie jest denerwująca dla społeczności, proszę dać mi znać. Chcę być dobrym obywatelem. Mam już dużo pomocy od was wszystkich.

15

wiem, że porzuciła tarczy, ale dam kilka wskazówek tutaj w razie innych ludzi jest ten sam problem lub przyjść do rozwijania tego samego wzoru w innej aplikacji

  • Jeśli masz zerowy ponieważ nie podałeś poprawnie identyfikatorów. Dokładnie sprawdź identyfikatory.
  • z linków, które pokazałeś na skomplikowanych rzeczach, określając actionLayout, który jest po prostu spinnerem, możesz po prostu określić actionViewClass = "android.widget.Spinner", który będzie działał.
  • następnie w OnCreateOptionsMenu zrobić:

    inflater.inflate(R.menu.my_menu, menu); // inflate the menu 
    Spinner s = (Spinner) menu.findItem(R.id.my_menu_spinner).getActionView(); // find the spinner 
    SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActivity().getActionBar() 
         .getThemedContext(), R.array.my_menu_spinner_list, android.R.layout.simple_spinner_dropdown_item); // create the adapter from a StringArray 
    s.setAdapter(mSpinnerAdapter); // set the adapter 
    s.setOnItemSelectedListener(myChangeListener); // (optional) reference to a OnItemSelectedListener, that you can use to perform actions based on user selection 
    

szczęśliwy kodowanie ...

+0

Czy wiesz, jak to będzie działać w przypadku niestandardowej karty? Używam obrazów zamiast słów tekstowych do wyświetlenia w Spinner, więc linia 'SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource (getActivity(). GetActionBar() .getThemedContext(), R.array.my_menu_spinner_list, android.R. layout.simple_spinner_dropdown_item); 'musi być inne dla niestandardowej karty. Nie mogę zrozumieć, jak. – Azurespot

+0

po prostu wywołaj dowolny konstruktor, który masz na niestandardowej karcie. 'SpinnerAdapter mSpinnerAdapter = new MyCustomAdapter()' – Budius

+0

Dzięki Budius, zrobiłem to, ale z jakiegoś powodu rozwijanie się nie dzieje. Pomyślałem, że to dlatego, że w moim adapterze niestandardowym brakuje 'android.R.layout.simple_spinner_dropdown_item' (ponieważ używa on wiersza Spinner jako ImageView, miejsca, w którym przechodzi tablica ze szufladami). Ale nie jestem pewien, czy to jest problem. Jeśli chcesz sprawdzić mój kod: http://stackoverflow.com/questions/30433501/custom-spinner-not-showing-dropdown-in-actionbar-icon Pytanie wciąż pozostaje bez odpowiedzi. Dzięki. – Azurespot

27

wiem, jest to stara sprawa, ale tylko w przypadku, gdy ktoś potknie się na nim (jak ja) i wciąż szuka kompletnej odpowiedzi, oto jak to zrobić za pomocą biblioteki zgodności, aby działała od wersji 7 (Android 2.1 Eclair) do wersji v19 (Android 4.4 KitKat):

W menu_layout.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:yourapp="http://schemas.android.com/apk/res-auto" > 

    <item android:id="@+id/spinner" 
    yourapp:showAsAction="ifRoom" 
    yourapp:actionViewClass="android.widget.Spinner" /> 
</menu> 

Korzystanie http://schemas.android.com/apk/res-auto nazw aliasem jako yourapp pozwala używać showAsAction atrybutów i actionViewClass, które nie istnieją w starszych wersjach Androida.

Następnie w kodzie aktywny:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_layout, menu); 
    MenuItem item = menu.findItem(R.id.spinner); 
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); 
    spinner.setAdapter(adapter); // set the adapter to provide layout of rows and content 
    spinner.setOnItemSelectedListener(onItemSelectedListener); // set the listener, to perform actions based on item selection 

Et voilà!

+1

Jeśli nie chcesz się martwić o starsze wersje, to obszar nazw aplikacji nie jest wymagany, możesz pracować z Androidem. Działa to również doskonale z CursorLoaders. – lalitm

+0

Od tej pory Android 2.3.3 (API v10) nadal stanowi ~ 18% rynku Android (patrz [Android Dashboard] (http://developer.android.com/about/dashboards/index.html) dla bieżących liczb), pomyślałem, że ważne jest dostarczenie odpowiedzi dotyczącej zgodności. Ale masz rację, że przestrzeń nazw Android wystarczy, jeśli twój minimalny sdk aplikacji jest wyższy niż Android 3.0 (API v11). –

+0

@lalitm, jeśli zauważyłeś, jest to dla biblioteki kompatybilności. Zdecydowanie wymagane, jeśli zamierzasz być BC. – frostymarvelous

-2
inflater.inflate(R.menu.my_menu, menu); // inflate the menu 

Spinner s = (Spinner) menu.findItem(R.id.my_menu_spinner).getActionView();  // find the spinner 
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActivity().getActionBar() .getThemedContext(), R.array.my_menu_spinner_list, android.R.layout.simple_spinner_dropdown_item); // create the adapter from a StringArray 
s.setAdapter(mSpinnerAdapter); // set the adapter 
s.setOnItemSelectedListener(myChangeListener); // (optional) reference to a OnItemSelectedListener, that you can use to perform actions based on user selection 
Powiązane problemy