Как закрыть / закрыть / свернуть SearchView в ActionBar в MainActivity?
Я пытаюсь очистить и закрыть SearchView после ввода значения. Я нашел решение, но оно закрывает поиск и не выполняет никаких действий, если я пытаюсь выполнить поиск снова.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(searchListener);
return super.onCreateOptionsMenu(menu);
}
SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String arg0) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
try {
searchView.onActionViewCollapsed();
}
catch(Exception ex){
ex.printStackTrace();
System.out.println(ex);
}
return true;
}
};
Я могу искать только в первый раз. Каждый раз, когда он только закрывает мою клавиатуру ввода и ничего не делает. Как это можно сделать правильно?
Редактировать. Предлагаемое изменение выглядит следующим образом:
try {
searchView.setIconified(true);
}
activity_main_actions.xml:
<!-- Search Widget -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="always"
android:actionViewClass="android.widget.SearchView"/>
Edit2:
Я изменилсяshowAsAction="always|collapseActionView"
но он закрывает мое приложение, когда я нажимаю на поиск.
Я также помещаю слушатель в OnCreateOptionsMenu, чтобы увидеть, если он что-то изменит:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
searchMenuItem = menu.findItem(R.id.action_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchView.setOnQueryTextListener(new OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String arg0) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
if (searchMenuItem != null) {
boolean closed = searchMenuItem.collapseActionView();
Toast.makeText(getApplicationContext(), "closing: " + closed, Toast.LENGTH_SHORT).show();
}
new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
Иclosed
логическое значениеfalse
- Я не знаю почему. Я читаюдокумент но это мне ничего не говорит.
Edit3:
Я прочитал слишком много интернета на эту тему, и мне пока не ясно. Виджет поиска очищен, клавиатура скрыта и действие выполнено. Единственная проблема заключается в том, что поиск не свернут, поэтому он охватывает остальные кнопки действий на панели действий.
@Override
public boolean onQueryTextSubmit(String query) {
searchView.setIconified(true);
searchView.clearFocus();
new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
return false;
}
Вот Я прочитал, что collapseActionView () не будет работать, потому что мой поиск - это не представление, а виджет.