Extension de l'adaptateur

J'essaie de créer (à des fins d'apprentissage) ma propre implémentation d'un AdapterView simple où les éléments proviennent d'un adaptateur de base (ImageAdapter à partir d'échantillons sdk).

Le code actuel est comme ceci:

  • La liste de suggestion d'autocomplèteTextView augmente
  • Quelle est la procédure à suivre pour détecter si un appareil Android possède une capacité d'envoi SMS?
  • Erreur lors du chargement de Genymotion Device sur OS X Mavericks
  • Vue Recycler montrant un seul élément
  • Choisissez un dossier sur un appareil Android
  • Int tableau à texture opengl dans Android
  • public class MyAdapterView extends AdapterView<ImageAdapter> implements AdapterView.OnItemClickListener{ private ImageAdapter mAdapter; public MyAdapterView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initThings(); } private void initThings(){ setOnItemClickListener(this); } @Override public ImageAdapter getAdapter() { // TODO Auto-generated method stub return mAdapter; } @Override public void setAdapter(ImageAdapter adapter) { // TODO Auto-generated method stub mAdapter=adapter; requestLayout(); } View obtainView(int position) { View child = mAdapter.getView(position, null, this); return child; } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); for(int i=0;i<mAdapter.getCount();i++){ View child = obtainView(i); child.layout(10, 70*i, 70, 70); addViewInLayout(child, i, null, true); } this.invalidate(); } @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Log.d("MYEXAMPLES","Clicked an item!"); } } 

    Ce n'est pas un chef-d'œuvre codant, il affiche simplement une pseudo-liste avec des images. Je sais que j'aurais pu utiliser ListView, GridView, Spinner, etc., mais je suis relativement nouveau sur Android, et j'essaie de comprendre certaines choses.

    Eh bien, la question est la suivante: Pourquoi mon OnItemClick ne lance pas?

    En utilisant le même ImageAdapter avec un GridView, tout fonctionne correctement, mais quand j'utilise avec la classe ci-dessus, je n'ai rien. À l'intérieur de AdapterView.java, il existe un code pour les événements click, longclick, etc … alors, pourquoi ne puis-je pas les licencier? Peut-être que je comprends mal les choses de base sur la façon dont AdapterView fonctionne? Devrais-je étendre d'autres classes de base à la place? Et pourquoi?

    En espérant trouver des conseils plus expérimentés ici, merci d'avance.

  • IllegalArgumentException: Le type de fenêtre ne peut pas être modifié après l'ajout de la fenêtre
  • Définir une largeur égale des colonnes dans la disposition de la table dans Android
  • L'application ne démarre pas lors de l'utilisation de la bibliothèque `com.android.future.usb.accessory`
  • Android: PdfDocument génère un pdf vide
  • Comment style du texte ActionaBar Tab dans Android?
  • FILL_PARENT et MATCH_PARENT
  • 3 Solutions collect form web for “Extension de l'adaptateur”

    Si vous AdapterView les sources d' AdapterView , vous verrez que OnItemClickListener est invoqué dans une méthode appelée performItemClick :

     public boolean performItemClick(View view, int position, long id) { if (mOnItemClickListener != null) { // ... mOnItemClickListener.onItemClick(this, view, position, id); return true; } return false; } 

    Cependant, si vous recherchez la source AdapterView pour l'utilisation de cette méthode, vous verrez qu'elle n'est pas appelée nulle part!

    En effet, si vous cochez la source de la Gallery par exemple, vous verrez que l'application performItemClick est appelée lors de la gestion des événements onSingleTapUp ou onKeyUp .

    Si vous souhaitez l'utiliser, vous devez détecter quand un utilisateur clique sur quelque part et appeler à l' performItemClick de votre propre performItemClick .

    Au lieu d'étendre l'AdapterView, pourquoi ne pas essayer avec baseAdapter. Lorsque vous utilisez votre adaptateur, il existe une méthode donnée ci-dessous.

     getView(int position, View convertView,ViewGroup group) 

    Dans la méthode ci-dessus, vous pouvez accéder à la mise en page pour chaque élément de liste de la liste et ici vous pouvez définir tous les événements pris en charge pour chaque contrôle.

    Je joue avec quelque chose de similaire et j'utilise OnItem * Selected * Listener, qui peut être plus ce que vous recherchez.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.