在我正在尝试的应用程序中,我想实现搜索,这将调用rest api。
正如我很久以前问过的,如何做一个SearchView它可以正常工作 - > How to use SearchView in Toolbar Android
但是现在我想尝试一些“不同”的东西(要多学点一点)。但我做错了。
我要做的是让活动受到影响SearchView.OnQueryTextListener
,所以我有:
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>
但由于某些原因(肯定我遗漏了某些东西),当我点击并在SearchBox中“写”某些内容时,不会触发这些方法。
我缺少什么?我发现的所有例子都与我很久以前的帖子类似。
答案 0 :(得分:0)
为我找到解决方案...... facepalm!
作为@Markkeen pointend,我错过了告诉SearchView谁在听,它固定在这样做:
@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);
}
有了这个,方法onQueryTextSubmit
和onQueryTextChange
被触发。
谢谢!