2017-01-09 58 views
0

在我試圖做的應用程序中,我想要實現搜索,這將調用休息api。由活動執行的工具欄中的SearchView

當我問很久以前就如何做一個搜索查看它工作正常 - >How to use SearchView in Toolbar Android

但現在我想嘗試一些「不同」(要了解多一點點)。但我做錯了什麼。

我試圖做的是使活動implmement SearchView.OnQueryTextListener,所以whay我是:

public class PMov extends AppCompatActivity implements SearchView.OnQueryTextListener {  
    .... 
    @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      getMenuInflater().inflate(R.menu.menu_main, menu); 
    } 

    @Override 
    public boolean onQueryTextSubmit(String query) { 
     Toast.makeText(this, "TextSubmit", Toast.LENGTH_SHORT).show(); 
     Logger.d("onQueryTextSubmit: " + query); 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     Toast.makeText(this, "TextChange", Toast.LENGTH_SHORT).show(); 
     Logger.d("onQueryTextChange: " + newText); 
     return false; 
    } 
} 

和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_search" 
     android:title="@string/action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always" 
     android:icon="@android:drawable/ic_menu_search"/> 
</menu> 

但由於某些原因(我肯定當我點擊並在「搜索框」中寫入某些內容時,方法不會被觸發。

我失蹤了什麼?我發現的所有例子都與我很久以前發佈的帖子類似。

+1

我猜你必須告訴SearchView什麼是聽I.e. 'setOnQueryTextListener(this)' –

+0

不確定,但是您是否嘗試過在searchView上調用'setOnQueryTextListener'並將匿名內部類用於'SearchView.OnQueryTextListener()'而不是在活動中實現,這對我很有用。 – user3820753

回答

0

尋找解決方案... facepalm對我來說!

爲@Markkeen pointend,我缺少告訴搜索查看誰在聽,變成了定這樣做:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     MenuItem searchItem = menu.findItem(R.id.action_search); 
     SearchView actionSearchView = (SearchView) searchItem.getActionView(); 
     actionSearchView.setOnQueryTextListener(this); 
    } 

而與此,方法onQueryTextSubmitonQueryTextChange被觸發。

謝謝!