Я создаю пользовательский SearchView, но до сих пор я не нашел (клик) событие или прослушиватель, если пользователь нажимает на виджет searchView. Таким образом, SearchView близок, пользователь нажимает на значок поиска (который прослушиватель?!), SearchView открывается. См. Рисунок ниже. Мне нужно это событие, потому что я хочу изменить пользовательский интерфейс после того, как пользователь откроет searchView
EDIT: Я пробовал до сих пор
-
setOnClickListener
для элемента SearchView → , но он запускается только при открытии SearchView (2-е изображение) -
просмотрел
SearchView
Api, но нет слушателя для этого действия (или я слепой?) -
попробовал обходной путь с
onWindowFocusChanged
в searchView, но из-за того, что searchView скрыт в какой-либо боковой панели youtube/facebook, это не работает
Любые идеи? Я также прикрепил код SearchView, но не думаю, что код неправильный. пока еще нет слушателя. btw: любые обходные пути приветствуются. Но было бы неплохо, если бы SearchView был закрыт в начале! (например, на рисунках выше)
public class AmplifySearchView extends SearchView implements
OnQueryTextListener, OnFocusChangeListener,
OnCloseListener {
private static final String DEBUG_TAG = "AmplifySeachView";
private Context context;
private DataBaseController datasource;
private StationListView searchResultListView;
private TextView noResultTextView;
private Boolean searchStarted = false;
public AmplifySearchView(Context context) {
super(context);
this.context = context;
}
public AmplifySearchView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
public void initSearchView(StationListView view, TextView noResultTextView) {
this.searchResultListView = view;
this.searchResultListView.setActivityId(Constants.UI_SEARCH_RESULT_LIST);
this.noResultTextView = noResultTextView;
this.setOnQueryTextListener(this);
this.setOnFocusChangeListener(this);
this.setOnCloseListener(this);
this.setOnCloseListener(this);
setIconifiedByDefault(true);
datasource = DataBaseController.getInstance(context);
int id = this.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) findViewById(id);
textView.setTextColor(Color.WHITE);
resetSearchInputTextField();
}
private void resetSearchInputTextField() {
setQueryHint(getResources().getString(R.string.search_hint));
}
@Override
public boolean onClose() {
Log.d(DEBUG_TAG, "onClose()");
searchResultListView.setVisibility(View.GONE);
noResultTextView.setVisibility(View.GONE);
searchStarted = false;
Intent intent = new Intent(Constants.SEARCH_ENDED);
intent.addCategory(Constants.UI_AMPLIFY_CATEGORY);
context.sendBroadcast(intent);
return false;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.d(DEBUG_TAG,"onFocusChange()" + hasFocus);
}
@Override
public boolean onQueryTextChange(String newText) {
//do sth...
}
@Override
public boolean onQueryTextSubmit(String query) {
Log.d(DEBUG_TAG, "onQueryTextSubmit -> " + query);
return true;
}
@Override
protected void onFocusChanged(boolean gainFocus, int direction,
Rect previouslyFocusedRect) {
Log.d(DEBUG_TAG, "onQueryTextSubmit -> " + gainFocus);
// TODO Auto-generated method stub
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
}
@Override
public void onActionViewCollapsed() {
Log.d(DEBUG_TAG, "onActionViewCollapsed");
super.onActionViewCollapsed();
}
@Override
public void onActionViewExpanded() {
Log.d(DEBUG_TAG, "onActionViewExpanded");
super.onActionViewExpanded();
}
}
btw: on Focus change здесь не работает, потому что searchview невидим в начале и вставляет позже ui...