2012-07-07 132 views
10

我添加了一個微調,使用第二個選項從答案here我動作條動作條(不導航。添加微調器

如何我添加一個微調適配器微調?我試圖用一個微調對象作爲谷歌描述here,但得到一個空的微調對象

任何人都知道如何做到這一點?我不希望微調器在操作欄的導航區域,但與其他行動項目(我正在使用拆分動作欄)

感謝您的幫助!

回答

6

嗯,我放棄了使用子菜單的Spinner想法。我意識到那個微調者是用來挑選一直保持選擇的東西的;子菜單是一個更好的UI適合。

謝謝反正。

P.S. 我是新來的。如果回答我自己的問題讓社區煩惱,請讓我知道。我想成爲一個好公民。我已經從你們那裏得到了很多幫助。

15

我知道你拋棄了微調,但我會給一些暗示這裏的情況下,其他人是有同樣的問題,或者你來開發同樣的模式在不同的應用程序

  • 如果你有空是因爲你沒有正確指定ID。仔細檢查ID。
  • 通過指定一個只是一個微調器的actionLayout,您可以指定一個actionViewClass =「android.widget.Spinner」來完成複雜的事情。
  • 然後在OnCreateOptionsMenu你做:

    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 
    

快樂編碼...

+0

任何想法這將如何工作的自定義適配器?我使用圖片而不是文本字顯示在Spinner中,所以行'SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActivity()。getActionBar() .getThemedContext(),R.array.my_menu_spinner_list,android.R。 'layout.simple_spinner_dropdown_item);'對於自定義適配器''必須不同。無法弄清楚如何。 – Azurespot 2015-05-25 09:45:57

+0

只需調用您在自定義適配器上的任何構造函數即可。 'SpinnerAdapter mSpinnerAdapter = new MyCustomAdapter()' – Budius 2015-05-25 09:47:55

+0

感謝Budius,我是這麼做的,但由於某種原因,下拉不會發生。我想這是因爲'android.R.layout.simple_spinner_dropdown_item'在我的自定義適配器中缺失(因爲它使用Spinner行作爲ImageView,drawables數組進入的地方)。但不知道這是否是問題。如果你想看看我的代碼:http://stackoverflow.com/questions/30433501/custom-spinner-not-showing-dropdown-in-actionbar-icon這個問題還沒有答案。謝謝。 – Azurespot 2015-05-25 10:05:16

27

我知道這是一個老問題,但以防萬一有人絆倒它(像我一樣),並且仍然在尋找完整的答案,下面介紹如何使用兼容性庫進行操作,使其可以從v7(Android 2.1 Eclair)到當前的v19(Android 4.4 KitKat):

在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> 

使用http://schemas.android.com/apk/res-auto命名空間別名爲yourapp使您可以使用屬性showAsAction和actionViewClass不上舊版本的Android的存在。

然後在您的活動代碼:

@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瞧!

+1

如果您不想擔心舊版本,那麼yourapp命名空間不是必需的,您可以使用android命名空間。此外,這與CursorLoaders完美結合。 – lalitm 2014-04-24 05:07:54

+0

由於目前Android 2.3.3(API v10)仍佔android市場的18%(請參閱[Android Dashboard](http://developer.android.com/about/dashboards/index.html)數字),我認爲提供兼容性答案很重要。但是如果您的應用程序的最小目標sdk高於Android 3.0(API v11),那麼您的android命名空間就足夠了。 – 2014-04-28 13:02:52

+0

@lalitm如果您注意到了,它是針對兼容性庫的。如果你的目標是成爲BC,這肯定是必需的。 – frostymarvelous 2016-02-17 13:50:02

-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