2

Я пытаюсь использовать решение this post, чтобы иметь Spinner в моем ActionBar. Я впервые использовал NAVIGATION_MODE_LIST ActionBar, но я не хочу, чтобы spinner использовался для навигации по корытовым представлениям (у меня будут вкладки для этого). Так я создал 2 XML:Ошибка взлома меню ActionBar от SherlockFragment (ClassCastException)

mode_spinner.xml

<Spinner xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /> 

options.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item 
    android:id="@+id/menu_mode" 
    android:actionLayout="@layout/mode_spinner" 
    android:showAsAction="ifRoom"/> 
</menu> 

, а затем попытался надуть его из моего фрагмента (SherlockFragment)

import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuInflater; 
import com.actionbarsherlock.view.MenuItem; 
@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.options, menu); 
    Spinner spinner = (Spinner) menu.findItem(R.id.menu_mode); 
    spinner.setAdapter(mSpinnerAdapter); 
    super.onCreateOptionsMenu(menu, inflater); 
} 

во время выполнения, я получил эту ошибку:

java.lang.ClassCastException: com.actionbarsherlock.internal.view.menu.MenuItemWrapper не может быть приведен к android.widget.Spinner

любая идея?

ответ

7

Чтобы получить доступ к этому представлению, необходимо получить код getActionView() по полученному в результате возврату товара с findItem(). Оттуда вы можете манипулировать им.

Вы также можете рассмотреть простое использование подменю с исключительно проверяемыми предметами.

+0

большое спасибо! вот исправленная строка: 'Spinner spinner = (Spinner) menu.findItem (R.id.menu_mode) .getActionView();' – elgui