J'ai cherché partout une solution à ce problème, mais je ne vois pas comment le mettre en œuvre. Ma OnItemClickListener
a été désactivée d'une manière ou d'une autre sur mes lignes ListView
, car j'ai une ImageButton
dans la disposition des lignes, qui prend le focus. J'ai trouvé de nombreuses questions, mais aucune ne m'a conduit nulle part.
J'ai vérifié cette question, mais je ne pouvais pas vraiment en faire la tête ou la queue. J'ai juste besoin d'un moyen de rendre les lignes cliquables afin de pouvoir détecter le moment où une ligne est appuyée. Appuyez longuement et concentrez-vous bien.
Au lieu d'un OnItemClickListener, ajoutez un OnClickListener à chacune de vos vues renvoyées par votre adaptateur. Vous devrez utiliser setItemsCanFocus
pour configurer votre liste:
ListView list = (ListView) findViewById(R.id.myList);
list.setAdapter(new DoubleClickAdapter(this));
list.setItemsCanFocus(true);
puis dans getView
de votre Adaptateur, vous obtiendrez une ligne cliquable. Le bouton est supposé être dans le fichier XML gonflé.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(context, R.layout.cell, null);
view.setClickable(true);
view.setFocusable(true);
view.setBackgroundResource(Android.R.drawable.menuitem_background);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(context).setTitle("touched").show();
}
});
return view;
}
définir l'attribut de votre ImageButton
:
Android:focusable="false"
Parce que AbsListView.onTouchEvent
vérifie child.hasFocusable()
.
Cela fonctionnera certainement. Ajoutez ceci à la définition de la mise en page.
Android:descendantFocusability="blocksDescendants"
Trouvé la solution ici
la meilleure façon de faire est la suivante:
Android:focusable="false"
Android:focusableInTouchMode="false"
définissez ces propriétés pour cette Imagebutton
et essayez . I
Une alternative à la définition d'une OnClickListener
pour chaque vue est de NE PAS utiliser une ImageButton
- utilisez plutôt une ImageView
. La ImageView
peut toujours envoyer des événements à une OnClickListener
et ne prendra pas le focus.
Pour ma version de ce problème, le problème était que j'avais défini mon objet TextView
sur Android:inputType="textMultiLine"
. Lorsque j'ai supprimé cette ligne, le problème de la liste non cliquable avait disparu. On dirait un méchant petit insecte.
De plus, je suis toujours capable d'utiliser les propriétés Android:minLines/Android:maxLines
sans problème, donc ce n'est pas un gros problème. Ce n'est tout simplement pas la solution à laquelle je m'attendais.
En tant que solution alternative qui fonctionne pour moi, vous pouvez essayer d'étendre votre adaptateur de BaseAdapter
(iso implémentant l'interface ListAdapter
)
La ligne suivante a résolu le problème dans mon projet:
<TextView ... Android:textIsSelectable="false" />
J'ai sous-classé ImageButton
et setFocusable="false"
dans la définition de la présentation ne fonctionnait pas pour moi. Il a résolu l'appel de setFocusable(false)
dans le constructeur de la sous-classe.
Mettez ce code ImageView nextpage= (ImageView)findViewById(R.id.btnEdit);
au lieu de ImageButton
. maintenant l'élément de la liste est actif
listView= (ListView) findViewById(R.id.listview_names);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Toast.makeText(getBaseContext(),"Clicked Button",Toast.LENGTH_LONG).show();
Log.d("h","clicked");
/* Intent intent=new Intent(MainActivity.this,Display_data.class);
intent.putExtra("NAME",n);
intent.putExtra("AGE",a);
startActivity(intent);*/
}
});
Y ce toast ne fonctionne pas