4

私はListViewにありActivityます。ListView行はそれぞれsであり、 2LinearLayoutつの子が含まれています。View両方ともですclickable。構造はこんな感じ-

 ______________________________
|      |                       |
|______|_______________________|

ここで、2つのアイテムを保持clickableし、親に対するスワイプアクションを検出しViewますthe LinearLayout

このための最善のアプローチを教えてください。

4

2 に答える 2

3

ここで、2つのアイテムをクリック可能に保ち、親ビュー、つまりLinearLayoutでスワイプアクションを検出したいと思います。

これらの2つの子ビューViewを拡張してラップする独自の行を作成できます。LinearLayoutこのために、スワイプを検出するためonInterceptTouchEventのメソッドとメソッドをオーバーライドします。onTouch現在スワイプしている行を知る必要がある場合は、カスタムビューにリスト内の位置を記憶させgetView、アダプターのメソッドで位置を更新することができます。

別のオプションは、スワイプを処理する通常の行ビューの上にオーバーレイビューを配置することだと思います。

于 2012-12-09T14:05:00.233 に答える
1

BaseAdapterオーバーライドで、各子への参照を取得し、呼び出されるたびにgetView各子に設定します。サンプル:onClickListergetView

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView==null){
            convertView = inflater.inflate(R.layout.layout, parent,false);
        }

        final MyClass item = (MyClass)getItem(position);

        View child1 = convertView.findViewById(R.id.child1);
        child1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("tag", "child1 from item "+ position +" , is clicked.");

            }
        });

        View child2 = convertView.findViewById(R.id.child2);
        child2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("tag", "child2 from item "+ position +" , is clicked.");

            }
        });

        return convertView;}

スワイプの場合は、を拡張してLinearLayoutオーバーライドonInterceptTouchEventし、これをに渡してGestureDetectorスクロールを処理します。スワイプの詳細についてはGestureDetector、Googleでサンプルを調べてGestureDetectorくださいSimpleOnGestureListener

于 2012-12-09T14:16:08.277 に答える