空指针异常:尝试在空对象引用上调用“android.view.MenuItem.getActionView()”接口方法

5

我想在ActionBar上添加搜索栏,但是在getActionView()方法中遇到了空指针异常。请帮助我解决这个问题,我已提供所需的详细信息。

我的MainActivity继承自AppCompatActivity,在这行代码上返回错误。

SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

为了上面的搜索视图,我正在导入以下内容:
import android.support.v7.widget.SearchView;

菜单main.xml文件

  <item
        android:id="@+id/action_search"
        android:orderInCategory="100"
        android:title="@string/action_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView" />

Gradle文件 -

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:support-v4:+'
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.google.android.gms:play-services-appindexing:8.1.0'
}

2
menu.findItem(R.id.action_search) 返回 null。菜单是否使用正确的 XML? - gvmani
2个回答

6
请上传完整代码。
你必须进行初始化。
getMenuInflater().inflate(R.menu.menu_main, menu); 

或者您必须声明。涉及IT技术相关内容。
MenuInflater inflater = getMenuInflater();
inflater.inflate()

然后在onCreateOptionsMenu()中使用这段代码

SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();

    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

例如-:
 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.

        // Associate searchable configuration with the SearchView
        getMenuInflater().inflate(R.menu.menu_main, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

         SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        this.menu = menu;  // this will copy menu values to upper defined menu so that we can change icon later akash

        return true;
    }

试一试。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接