【问题标题】:ActionBar menu inflation error from SherlockFragment (ClassCastException)来自 SherlockFragment (ClassCastException) 的 ActionBar 菜单膨胀错误
【发布时间】:2012-05-21 19:31:39
【问题描述】:

我正在尝试使用this post 的解决方案,以便在我的ActionBar 中有一个Spinner。 我首先使用的是 ActionBar 的 NAVIGATION_MODE_LIST,但我不希望微调器用于导航槽视图(我将为此设置选项卡)。 所以我创建了 2 个 xml:

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

有什么想法吗?

【问题讨论】:

    标签: android android-actionbar actionbarsherlock classcastexception


    【解决方案1】:

    您需要对从findItem() 返回的结果项目调用getActionView() 才能访问该视图。从那里你可以操纵它。

    您可能还想考虑简单地使用带有专门可检查项目的子菜单。

    【讨论】:

    • 非常感谢!这是更正后的行:Spinner spinner = (Spinner) menu.findItem(R.id.menu_mode).getActionView();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多