私は(学習目的で)基本的なアダプター(SDKサンプルのImageAdapter)からアイテムが取得される単純なAdapterViewの独自の実装を作成しようとしています。
実際のコードは次のようになります。
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!");
}
}
これはコーディングの傑作ではなく、画像付きの疑似リストビューを表示するだけです。ListView、GridView、Spinnerなどを使用できたことは知っていますが、Androidに比較的慣れていないため、いくつかのことを理解しようとしています。
ここでの質問は、onItemClickが起動しないのはなぜですか?
GridView で同じ ImageAdapter を使用すると、すべて正常に動作しますが、上記のクラスで使用すると何も得られません。AdapterView.java内には、クリック、ロングクリックなどのイベントのコードがあります。AdapterView の仕組みに関する基本的なことを誤解しているのかもしれません。代わりに他の基本クラスを拡張する必要がありますか? なぜ?
ここでより経験豊富なガイダンスを見つけたいと思っています。事前に感謝します。