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
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.
Vous devez vous connecter pour publier un commentaire.
Comment à ce sujet?
Description du développeur android site dit..
Définit un écouteur d'informer lors de la recherche, le bouton est pressé. Ce n'est pertinente que lorsque le champ de texte n'est pas visible par défaut. L'appel de setIconified(faux) peut également provoquer ce auditeur à être informé.
http://developer.android.com/reference/android/widget/SearchView.html#setOnSearchClickListener(android.view.View.OnClickListener)
résout le problème. en fait, je pensais que j'ai été en utilisant cette auditeur avant, mais la
OnSearchClickListener
n'est pas leOnClickListener
dans mon SearchView. Vous devez déclarer qu'auditeur de l'extérieur commepour le champ de texte visibles d'utilisation:
pour le champ de texte invisible utilisation:
Essayer dans la Kotlin:
En Java :
Ceci a été écrit avec l'API 15. Il n'a pas été testé. Les détails à fond.
Vous donner un OnOpenListener et lorsque la Vue est cliqué, cela va déclencher l'événement. Lorsqu'il perd le focus, il permet de réinitialiser la valeur booléenne. Je pense qu'il déclenche également l'OnClose aswell qui est déjà intégrée. Ce qui peut être un problème, c'est l'accent bits; j'ai eu des problèmes avant d'utiliser un SearchView et il n'abandonnera pas son orientation. Peut-être que vous pouvez en dehors de la classe attribuer lors de l'Affichage doit avoir le focus ou pas. Si vous voulez plus de fonctionnalités que vous devez construire votre propre.