2014-02-06 32 views
6

我可以通過這種方式讓Spinner進入操作欄; 陣列中重新/值的項目的/ languages.xmlSpinner的OnItemClickListener

<string-array name="languages"> 
    <item>Finnish</item> 
    <item>French</item> 
    <item>German</item> 
    <item>Slovakian</item> 
    <item>Polish</item> 
</string-array> 

在res /菜單/ main.xml中

<item 
    android:id="@+id/menuSort" 
    android:actionLayout="@layout/spinner" 
    android:showAsAction="ifRoom" 
    android:title="@string/choose"/> 

在res /佈局/ spinner.xml

<Spinner 
    android:id="@+id/spinner" 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:entries="@array/languages"/> 

而最後活動課;

public class Base_Activity extends Activity { 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    final Spinner spinner = new Spinner(this); 
    Log.i("DEBUG1", "CHECKPOINT1"); 
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
      this, android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(spinnerArrayAdapter); 
    Log.i("DEBUG2", "CHECKPOINT2"); 
    spinnerArrayAdapter.setDropDownViewResource(0); 
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 

       String items=spinner.getSelectedItem().toString(); 
       Log.i("Selected item : ",items); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 

    }); 
    return true; 
} 

}

什麼,我沒有得到上的微調項目沒有任何反應ItemSelected。正如你可以從我的xml文件中看到的,我甚至不需要Adapter來獲取微調器。但我使用適配器來獲取OnItemSelected。請幫助我發生了什麼事?

回答

17

嘗試這或許可以幫助你

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     final Spinner spinner = (Spinner) menu.getItem(0).getActionView().findViewById(R.id.spinner); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

       String items = spinner.getSelectedItem().toString(); 
       Log.i("Selected item : ", items); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 

      } 

     }); 
     return super.onCreateOptionsMenu(menu); 
    } 
+0

給出{java.lang.ClassCastException:android.widget.RelativeLayout不能轉換爲android.widget.Spinner} – bShah

+0

請現在檢查 –

+0

現在字符串(項目)從微調器中丟失。 – bShah

-1

如果您需要單擊事件,則必須添加OnItemClickListener而不是OnItemSelectedListener

只有當您選擇您的項目或使用軌跡球或向上/向下箭頭瀏覽視圖時,您的方法纔會有效。如果你想點擊,再加入OnItemClickListener並覆蓋

public void onItemClick(AdapterView<?> arg0, View arg1, 
         int arg2, long arg3) 
+0

嘗試過,但也沒有幫助。 :( – bShah

+0

這次你得到了什麼錯誤? –

+0

現在完成!!檢查勾選的答案。感謝支持。 – bShah