Android: Comment détecter cliquez sur personnalisé SearchView élément

Je m de la création d'une coutume SearchView, mais jusqu'à présent je n'ai pas trouver un (clic)de l'événement ou de l'auditeur, si l'utilisateur clique sur le searchView widget. Donc SearchView est proche, l'utilisateur clique sur l'Icône de recherche (qui auditeur?!), SearchView est ouvert. Voir l'image ci-dessous. J'ai besoin de ça, parce que je veux changer l'INTERFACE utilisateur après que l'utilisateur ouvre le searchView

Android: Comment détecter cliquez sur personnalisé SearchView élément

EDIT:
Ce que j'ai essayé jusqu'à présent est

  • setOnClickListener à SearchView Element -> mais il est déclenché uniquement si le SearchView est ouvert(2ème photo)

  • cherché SearchView de l'Api, mais il n'y a pas un auditeur pour que l'action (ou suis-je aveugle?)

  • essayé une solution de contournement avec onWindowFocusChanged de la searchView, mais en raison du fait que le searchView est caché dans une sorte de youtube/facebook sidebar, cela ne fonctionne pas

Des idées? J'ai attaché mon SearchView Code, mais ne pense pas que le code est erroné. juste pas d'auditeur encore. btw: toutes les solutions de contournement sont les bienvenus. Mais il serait bien, si le SearchView est fermé au début! (comme dans les photos ci-dessus)

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: le changement de Focus ne fonctionne pas ici, parce que searchview est invisible au début et à insérer dans l'interface utilisateur plus tard...

  • la deuxième onFocusChanged n'est pas appelé ?
  • non, je viens de vérifier à nouveau. en fait, aucun des focus changé les auditeurs sont appelés. pas même après la appstart (qui vient de me confond mote, dans la mesure où je l'ai vu avant...)
  • Un vraiment hacky travail autour de peut-être à l'écoute pour une cliquez dans la zone de la searchview? Vous devriez être en mesure de tirer de l'emplacement et les dimensions de celui-ci sur le point de vue, peu importe si c'est dynamiquement mis ou pas. Cela dit, la réponse ci-dessous à propos de setOnSearchClickListener semble être une bien meilleure solution si cela fonctionne réellement pour vous.
InformationsquelleAutor longi | 2013-01-30