Sto provando a fare (a scopo di apprendimento) la mia implementazione di un semplice AdapterView in cui gli elementi provengono da un adattatore di base (ImageAdapter da campioni sdk).Extending AdapterView
codice effettivo è come questo:
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!");
}
}
Questo non è un capolavoro di codifica, mostra solo una pseudo-listview con le immagini. So che avrei potuto usare ListView, GridView, Spinner, ecc., Ma sono relativamente nuovo per Android e sto cercando di capire alcune cose su di esso.
Bene, la domanda è: Perché il mio onItemClick non viene attivato?
Utilizzando lo stesso ImageAdapter con GridView, tutto funziona correttamente, ma quando uso con la classe precedente, non ottengo nulla. All'interno di AdapterView.java c'è un codice per quegli eventi click, longclick, ecc ... quindi perché non posso semplicemente licenziarli? Forse sto fraintendendo le cose basilari su come funziona AdapterView? Dovrei estendere altre classi base invece? E perché?
Sperando di trovare una guida più esperta qui, grazie in anticipo.
hai una soluzione ?? – Riser