Adaptateur extensibleView
je suis en train de faire (à des fins d'apprentissage) ma propre mise en œuvre d'un simple AdapterView où les éléments vient à partir d'une base de l'Adaptateur (ImageAdapter à partir d'exemples sdk).
Code est comme ceci:
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 de codage, il affiche juste un pseudo-listview avec des photos. Je sais que je pourrais avez utilisé ListView, GridView, Spinner, etc. mais je suis relativement nouveau pour android et j'en suis à essayer de comprendre certaines choses sur elle.
Bien, la question ici est:
Pourquoi mon onItemClick pas de tir?
À l'aide de la même ImageAdapter avec un GridView, tout fonctionne bien, mais lorsque je l'utilise avec la classe ci-dessus, je ne reçois rien.
À l'intérieur de AdapterView.java il est le code pour ceux cliquez sur, longclick, etc... alors pourquoi ne puis-je pas juste le feu?
Peut-être que je suis incompréhension des choses de base sur la façon AdapterView œuvres? Dois-je étendre à d'autres classes de base à la place? Et pourquoi?
En espérant trouver plus d'orientation d'expérience ici, merci d'avance.
source d'informationauteur Ander Webbs
Vous devez vous connecter pour publier un commentaire.
Si vous prenez un coup d'oeil dans
AdapterView
's de la source, vous verrez que leOnItemClickListener
est appelé dans une méthode, appeléeperformItemClick
:Cependant, si vous recherchez le
AdapterView
source pour le cas où cette méthode est utilisée, vous verrez qu'il ne s'appelle pas n'importe où!En effet, si vous regardez le source de la
Gallery
par exemple, vous verrez que leperformItemClick
est appelée dans la manipulation de laonSingleTapUp
ouonKeyUp
événements.Si vous souhaitez l'utiliser, vous devez détecter le moment où un utilisateur clique quelque part et l'appeler
performItemClick
sur votre propre.Au lieu de prolonger l'AdapterView, pourquoi ne pas vous essayer avec le baseAdapter. Lorsque vous costumize votre Carte, il a niso la méthode donnée ci-dessous.
dans la méthode ci-dessus, vous pouvez accéder à la disposition de chaque élément de liste de la liste et vous pouvez définir ici la tous les événements pris en charge pour chaque contrôle.
Je joue avec quelque chose de similaire et je suis en utilisant onItem*Sélectionné*Auditeur qui peut être plus à ce que vous recherchez.