2

我已经在我的项目中更新了 holoeverywhere 版本,所以我不再使用 ActionBarSherlock (ABS) 而是 ActionBarCompact (ABC)

我遇到的问题是在使用 MenuItemCompat.getActionView(aMenuItem) 时,我总是得到一个空值。

我拥有的确切代码是:

public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.dashboard_menu, menu);

_itemNotifications = menu.findItem(R.id.notifications);
_containerViewItemNotifications = (LinearLayout) MenuItemCompat.getActionView(_itemNotifications);
_viewItemNotifications = (TextView) _containerViewItemNotifications.findViewById(R.id.ActionViewDashboard);
_containerViewItemNotifications.setOnClickListener(new OnClickListener() {
    @SuppressLint("NewApi")
    public void onClick(View v) {
    if (android.os.Build.VERSION.SDK_INT >= 16) {
        _viewItemNotifications.setBackground(getResources().getDrawable(R.drawable.qnotificacion_disbled));
    } else {
        _viewItemNotifications.setBackgroundDrawable(getResources().getDrawable(R.drawable.qnotificacion_disbled));
    }
    _viewItemNotifications.setText(R.string.empty);
    onOptionsItemSelected(_itemNotifications);
    }
});

_itemAnotateResult = menu.findItem(R.id.menu_anotate_result);

return super.onCreateOptionsMenu(menu);
}

其中 MenuItemCompat.getActionView(_itemNotifications) 始终为空值

我的 XML 菜单文件是这样的:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >

<item
    android:id="@+id/notifications"
    android:actionLayout="@layout/actionview_dashboard"
    android:title="@string/customize"        
    app:showAsAction="ifRoom"/>
<item
    android:id="@+id/menu_anotate_result"
    android:title="@string/anotate"
    android:visible="false"
    app:showAsAction="ifRoom|withText"/>

</menu>

我该如何克服呢?我尝试遵循与 android 文档中 SearchViewItem 解释类似的方法,但根本没有成功

提前致谢。

4

1 回答 1

4

我认为问题在于 ABC 不支持自定义 ActionLayouts。我找到了一个遇到类似问题的人,他成功地解决了。在添加 SearchView 时,请注意他使用了 app:actionViewClass。您可以尝试使用 app:actionLayout 看看它是否适合您吗?

于 2013-10-09T19:37:06.750 回答