2016-06-24 45 views
0

我有一个SearchView实现,根本不起作用。我尝试了很多东西,但没有任何工作。(thisthis和其他答案) 我做错了什么?我正在尝试记录部分结果或其他能够告诉我它正在工作的内容,但我什么也没有得到。SearchView无法正常工作

的Manifest.xml

<activity 
      android:name=".MapaActivity" 
      android:label="@string/title_activity_mapa" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH"/> 
      </intent-filter> 
     </activity> 

menu.xml文件

<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="com.buweb.bu.MapaActivity"> 
    <item android:id="@+id/search" 
     android:title="@string/menu_search" 
     android:icon="@android:drawable/ic_menu_search" 
     app:showAsAction="collapseActionView|ifRoom" 
     app:actionViewClass="android.support.v7.widget.SearchView" /> 
</menu> 

活动

public class MapaActivity extends BaseActivity implements OnMapReadyCallback, SearchView.OnQueryTextListener { 

... //A lot of code doing stuff with map. 



@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_mapa, menu); 

     MenuItem searchItem = menu.findItem(R.id.search); 
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
     searchView.setOnQueryTextListener(this); 

     return true; 
    } 


    @Override 
    public boolean onQueryTextSubmit(String query) { 
     Log.d("", "query:" + query); 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     Log.d("", "query:" + newText); 
     return false; 
    } 
+0

结帐这个http://androidquake.blogspot.in/2015/12/searching-in-list.html – Singhak

回答

0

你缺少一些imple mentations:

1-创建一个可检索的配置: 可搜索配置定义的搜索查看如何表现及在RES/XML/searchable.xml文件中定义。

<?xml version="1.0" encoding="utf-8"?> 

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
     android:label="@string/app_name" 
     android:hint="@string/search_hint" /> 

2。在你的应用程序的清单文件,声明<meta-data>元素指向RES/XML/searchable.xml文件,让你的应用程序知道在哪里可以找到它。声明在<activity>元素要以显示搜索查看:

<activity ... > 
    ... 
    <meta-data android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 

</activity> 

3-在您之前创建的onCreateOptionsMenu()方法,与搜索查看所述可搜索的结构通过调用setSearchableInfo(SearchableInfo)关联:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options_menu, menu); 

    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = 
      (SearchView) menu.findItem(R.id.search).getActionView(); 
    searchView.setSearchableInfo(
      searchManager.getSearchableInfo(getComponentName())); 

    return true; 
} 

欲了解更多信息,请参考以下链接:

+0

这样做了,但仍不工作。 – Aiapaec

+0

请参阅@NPike https://stackoverflow.com/a/15735869/2449314 基本上,不要在xml文件中硬编码字符串 –