Extensão do AdapterView
Estou tentando fazer (para fins de aprendizado) minha própria implementação de um AdapterView simples, de onde os itens vêm de um adaptador básico (ImageAdapter de amostras de sdk).
O código real é assim:
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!");
}
}
Esta não é uma obra-prima de codificação, apenas exibe uma pseudo-lista com imagens. Eu sei que eu poderia ter usado ListView, GridView, Spinner, etc., mas sou relativamente novo no Android e estou tentando descobrir algumas coisas nele.
Bem, a pergunta aqui é: Por que meuonItemClick não está disparando?
Usando o mesmo ImageAdapter com um GridView, tudo funciona bem, mas quando eu uso com a classe acima, não recebo nada. DentroAdapterView.java existe código para esses eventos de clique, clique longo, etc ... então, por que não posso simplesmente acioná-los? Talvez eu esteja entendendo mal as coisas básicas sobre como o AdapterView funciona? Em vez disso, devo estender outras classes base? E porque?
Na esperança de encontrar orientações mais experientes aqui, obrigado antecipadamente.