J'essaie de faire (pour apprendre) ma propre implémentation d'un simple AdapterView où les éléments proviennent d'un adaptateur de base (ImageAdapter des échantillons sdk).Extension AdapterView
code actuel 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 images. Je sais que j'aurais pu utiliser ListView, GridView, Spinner, etc. mais je suis relativement nouveau pour Android et j'essaie de comprendre certaines choses à ce sujet.
Eh bien, la question ici est: Pourquoi mon onItemClick ne se déclenche pas? En utilisant le même ImageAdapter avec un GridView, tout fonctionne bien, mais quand je l'utilise avec la classe ci-dessus, je n'ai rien. À l'intérieur AdapterView.java il y a du code pour ces événements click, longclick, etc ... alors pourquoi ne puis-je pas les déclencher? Peut-être que je ne comprends pas les choses de base sur le fonctionnement de AdapterView? Dois-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.
Avez-vous obtenir la solution ?? – Riser