android - menu.findItem 返回 null

标签 android android-layout searchview

我找不到解决方案请帮忙

工具:

public class VentasActivity extends ActionBarActivity
    implements NavigationDrawerFragment.NavigationDrawerCallbacks, android.support.v7.widget.SearchView.OnQueryTextListener

哪里返回空:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!mNavigationDrawerFragment.isDrawerOpen()) {
        getMenuInflater().inflate(R.menu.sales, menu);
        restoreActionBar();

       // HERE RETURNS NULL
        searchView = (SearchView) menu.findItem(R.id.action_product_search).getActionView();

        if (searchView != null) {
            final Menu menu_block = menu;
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

                @Override
                public boolean onQueryTextSubmit(String query) {
                    // collapse the view ?
                    menu_block.findItem(R.id.action_product_search).collapseActionView();
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String newText) {
                    // search goes here !!
                    // listAdapter.getFilter().filter(query);
                    return false;
                }
            });
            Log.i("sales module", "SearchView OK");
        } else
            Log.i("sales module", "SearchView is null");


        return true;
    }
    return super.onCreateOptionsMenu(menu);
}

和 sales.xml

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

<item android:id="@+id/action_product_search"
    android:title="@string/action_search"
    android:icon="@drawable/ic_action_search"
    app:showAsAction="always|collapseActionView"
    android:actionViewClass="android.widget.SearchView" />

非常非常感谢!

更新:restoreActionBar() 的代码

public void restoreActionBar() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    actionBar.setDisplayShowTitleEnabled(true);
    actionBar.setTitle(mTitle);
}

最佳答案

终于找到问题了:

我将/res/menu/sales.xml 中的最后一行更改为:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<!-- Search Widget -->
<item android:id="@+id/search_view_productos"
    android:title="@string/action_search"
    android:icon="@drawable/ic_action_search"
    app:showAsAction="always|collapseActionView"
    android:actionViewClass="android.widget.SearchView" />
</menu>

为此:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<!-- Search Widget -->
<item android:id="@+id/search_view_productos"
    android:title="@string/action_search"
    android:icon="@drawable/ic_action_search"
    app:showAsAction="always|collapseActionView"
    app:actionViewClass="android.widget.SearchView" />
</menu>

问题是 actionViewClass 上的 xml 命名空间

关于android - menu.findItem 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22033323/

相关文章:

Android - 按钮背景颜色缩小按钮的高度

android - 当滚动出 View 时,在 RecyclerView 中所做的微调器选择会被重置

android - 如何设计从右到左的线性布局

java - 从 searchView 小部件中删除图标(不在 actionBar 中)

android - 如何实现语音搜索到SearchView

android - 无法在 xamarin android 中创建 wcf 服务对象/客户端以供引用

android - 如何在 Fragment 中 onCreateView 时更改我的标签页

Android 小部件 ImageView 不显示

android - 如何在 Android 中设置 EditText 的最小和最大字符数限制?

android - 在主要 Activity 中执行 searchView 时遇到问题(不是操作栏)