2012-07-07 6 views
10

私は答えhereから2番目のオプションを使用して、私のアクションバーにスピナーを追加している。私は、私はGoogleのようスピナーのオブジェクトを使用してみました?スピナーにスピナーアダプタを追加(アクションバーにスピナーを追加していないナビゲーション

どのようにhereと記載されていますが、Spinnerオブジェクトがnullになります。

私は、スピナーをアクションバーのナビゲーション領域に置くのではなく、他のアクションアイテム(私は分割を使用していますアクションバー)

ありがとうございました!

答えて

6

まあ、私はサブメニューを使用してスピナーのアイデアを捨てた。私はスピナーが選ばれたものを選んだことに気付きました。サブメニューは、より良いUIフィットに縫い付けられました。

ありがとうございました。

P.S. ここは新しいですね。自分の質問に答えてもコミュニティに迷惑をかける場合は、教えてください。私は良い市民になりたい私はすでにあなたからたくさんの助けを受けてきました。

15

私はあなたがスピナーを捨て知っているが、私は他の人が同じ問題を抱えているか、あなたがnullのだ場合は別のアプリ

  • で同じパターンを開発するために来た場合にここにいくつかのヒントを与えるだろう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

+0

あなたのカスタムアダプターにあるコンストラクターを呼び出します。 'SpinnerAdapter mSpinnerAdapter = new MyCustomAdapter()' – Budius

+0

Budiusさん、ありがとうございましたが、何らかの理由でドロップダウンが発生しません。これは、カスタムアダプタで 'android.R.layout.simple_spinner_dropdown_item'が見つからないためです(Drawables配列が入る場所であるImageViewとしてSpinnerの行が使用されるため)。しかし、それが問題なのかどうかは分かりません。私のコードをチェックアウトしたければ:http://stackoverflow.com/questions/30433501/custom-spinner-not-showing-dropdown-in-actionbar-icon質問にはまだ答えがありません。ありがとう。 – Azurespot

27

私が行ったように(私はこれが古い質問ですけど、念の誰かがそれにつまずきます)、まだ完全な答えを探しています。互換ライブラリを使用してv7(Android 2.1 Eclair)から現在のv19(Android 4.4 KitKat)まで対応する方法は次のとおりです。

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

yourappは、Androidの古いバージョンに存在しない属性showAsActionとactionViewClassを使用することができますようエイリアスhttp://schemas.android.com/apk/res-auto名前空間を使用します。あなたのアクティビティコードで次に

@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 namespaceで作業できます。また、これはCursorLoadersで完全にうまく動作します。 – lalitm

+0

現在Android 2.3.3(API v10)はアンドロイドマーケットの約18%を占めています([Android Dashboard](http://developer.android.com/about/dashboards/index.html)を参照)数字)、私はそれが互換性の答えを提供することが重要だと思った。しかし、アプリケーションの最小ターゲットsdkがAndroid 3.0(API v11)を上回っている場合は、Androidの名前空間で十分です。 –

+0

@lalitm気付いた場合は、互換性ライブラリ用です。あなたが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 
関連する問題