Android应用在操作项添加时崩溃

时间:2014-12-02 16:26:22

标签: android crash android-actionbar android-support-library

我一直在开发一个带有ActionBar的应用程序,并且没有初始操作项(只是溢出点)。过了一会儿我决定实现一个搜索图标,所以我像这样更新我的/res/menu/main_activity_actions.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:yourapp="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity" >

<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:orderInCategory="1"
      android:showAsAction="always"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
      android:title="@string/action_settings"
      android:orderInCategory="100"
      android:showAsAction="never" />
</menu>

我还使用onCreateOptionsMenu()更新了主要活动(扩展了ActionBarActivity)。

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

问题是此代码根本不会显示action_search图标,而是始终将其放在溢出菜单列表中的相应“标题”中。 我认为问题是属性“showAsAction”因为我正在使用支持库所以我已将其更新为:

<menu
 ...
 xmlns:myapp="http://schemas.android.com/apk/res-auto"
    ...
    <item android:id="@+id/action_search"
    myapp:showAsAction="ifRoom"/>
    ...
    <item android:id="@+id/action_settings"
    myapp:showAsAction="never"/>
 </menu>

这个小修改使应用程序在启动时崩溃,我不明白为什么! 错误就像

“E / AndroidRuntime:FATAL EXCEPTION:main     过程:blabla.blabla.bla.appname,PID:29450     android.view.InflateException:二进制XML文件行#17:错误膨胀类android.support.v7.internal.view.menu.ActionMenuItemView ...“

有很多库错误而没有代码引用。

任何提示?谢谢!!

2 个答案:

答案 0 :(得分:0)

试试这段代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >

<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:orderInCategory="1"
      app:showAsAction="always"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
      android:title="@string/action_settings"
      android:orderInCategory="100"
       app:showAsAction="always" />
</menu>

答案 1 :(得分:0)

我确实看到你的XMLNS标签很奇怪。在您的第一个示例中,您使用了:xmlns:yourapp="http://schemas.android.com/apk/res-auto"

但是在您的代码更改第二个示例中,您使用的是myapp:showAsAction,而不是android:showAsActionyourapp / myapp或其他任何内容都无关紧要,只要它与整个文件匹配即可。但是你需要两者,因为自定义XML标记名称空间事物仅用于预蜂窝支持库的使用。 android:showAsAction需要为3.x和更新版本。

尝试:

<menu ... xmlns:myapp="http://schemas.android.com/apk/res-auto"
    ...
    <item android:id="@+id/action_search"
      android:showAsAction="ifRoom"
      myapp:showAsAction="ifRoom" />
    ...
    <item android:id="@+id/action_settings"
      android:showAsAction="never"
      myapp:showAsAction="never"/>
</menu>

虽然我不确定这是否会导致崩溃。如果您在3.x或更高版本上运行,则崩溃可能与缺少资源或活动代码中的某些内容有关。