(SearchView)MenuItemCompat.getActionView(item)始终为null

时间:2018-01-29 12:10:46

标签: android searchview android-actionbar-compat android-search

我是android studio的初学者,抱歉我的英语不好。

我在secondActivity中有一个searchView 我做过以下的事情:

1.在gradle中实现v7 AppCompat支持库,例如 compile 'com.android.support:appcompat-v7:25.3.1'
2.针对当前活动实施的android.support.v7.widget.SearchView.OnQueryTextListener界面 public class ViewActivity extends AppCompatActivity implements SearchView.OnQueryTextListener

但searchView仍然为null。 以下是我的源代码:

Menu.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/action_search1"
         android:icon="@android:drawable/ic_menu_search"
         app:showAsAction="always"
         app:actionViewClass="android:support.v7.widget.SearchView"
         android:title="@string/search_hint" />
   </menu>  
活动

@Override
public boolean onCreateOptionsMenu(android.view.Menu menu){
    getMenuInflater().inflate(R.menu.menu_search, menu);
    final MenuItem item = menu.findItem(R.id.action_search1);
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
    searchView.setQueryHint("Search Name");
    searchView.setIconified(false);
    searchView.setOnQueryTextListener(this);
    return super.onCreateOptionsMenu(menu);
}

2 个答案:

答案 0 :(得分:1)

在API级别26.1.0中不推荐使用MenuItemCompat.getActionView(MenuItem项目)。

现在推荐的方法是直接在菜单项上调用getActionView():

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_search, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search); 
    SearchView searchView = (SearchView) searchItem.getActionView();

    // ...
}

答案 1 :(得分:0)

我想我找到了解决方案:
Menu.xml 中,有

app:actionViewClass="android:support.v7.widget.SearchView"  

应该是

app:actionViewClass="android.support.v7.widget.SearchView"