我想在用户输入文本进行搜索时禁用我的应用程序的某些功能。我的 ActionBar 中相关项目的 xml 是
<item android:id="@+id/actionbar_search"
android:orderInCategory="1"
android:showAsAction="always|withText|collapseActionView"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/earth_2508858_search_en"
android:inputType="textPostalAddress" />
在我目前满足搜索的相应代码中是
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.action_menu, menu);
MenuItem DestinationTxt = menu.findItem(R.id.actionbar_search);
final SearchView mySearchView = (SearchView)DestinationTxt.getActionView();
mySearchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) { return false; }
@Override
public boolean onQueryTextSubmit(String query) {
//Hide the Keyboard
imm.hideSoftInputFromWindow(mySearchView.getWindowToken(), 0);
// CODE TO DO THE SEARCH
return true;
}
});
}
我浏览了 SearchView 上的方法,但没有看到任何可以告诉我它是否处于活动状态的信息。我还担心放入一个布尔状态变量来指示何时将文本输入到 SearchView 中,以防发生一些我没有考虑到的行为(例如按下后退按钮,活动被暂停),并且不知何故状态变量变得陈旧,因此禁用的功能保持禁用状态。所以我正在寻找一种强大的方法来做到这一点,所有帮助都表示赞赏:-)。
更新。下面的答案建议使用OnFocusChangeListener
由 mySearchView 对象和/或 mySearchView.isFocused() 方法实现的接口。两者听起来都很有希望,但是我现在已经测试过了,似乎都没有。也许他们的失败与这个 SearchView 在 ActionBar 中的事实有关?无论如何,我仍然在寻求一个强大的解决方案。