14

私は(学習目的で)基本的なアダプター(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 の仕組みに関する基本的なことを誤解しているのかもしれません。代わりに他の基本クラスを拡張する必要がありますか? なぜ?

ここでより経験豊富なガイダンスを見つけたいと思っています。事前に感謝します。

4

3 に答える 3

0

私は似たようなもので遊んでいて、onItem * Selected *Listenerを使用しています。これはあなたが探しているものよりも多いかもしれません。

于 2012-07-25T10:53:18.853 に答える
0

AdapterView を拡張する代わりに、baseAdapter を試してみませんか。アダプターをコスチューム化する場合、以下の方法があります。

getView(int position, View convertView,ViewGroup group) 

上記の方法では、リストビューの各リスト項目のレイアウトにアクセスできます。ここでは、各コントロールでサポートされているすべてのイベントを設定できます。

于 2010-04-02T07:38:27.993 に答える