1

問題

ストックGmailアプリに似たListViewを作成したいと思います。左側に CheckBox があり、右側に 2 つの TextView があります。CheckBox は選択できますが、残りのレイアウトは選択できません。チェックボックスを選択して Contextual Action Bar をアクティブにしたいのですが、Raw の残りの部分は別のアクティビティ (リスナーに対して 2 つの異なるアクション) を開始する必要があります。私のリスト項目は次のようになります。 ここに画像の説明を入力

質問

リスト アイテムのさまざまな領域がさまざまなアクションをトリガーするリスト アイテムを作成するにはどうすればよいですか?

コード

リスト アイテムのレイアウト:

<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBox
    android:id="@+id/checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:focusable="false" />

<TextView
    android:id="@+id/amount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:gravity="right" />

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="8dp"
    android:layout_toRightOf="@+id/checkbox" />
</merge>

リスト項目自体:

<?xml version="1.0" encoding="utf-8"?>
<hu.gulyasm.fintrac.ui.TransactionItem xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/list_item_root"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:clickable="true"
   android:padding="24dp" />

最後に、アダプタでの私のgetView()メソッドとonClickListener:

@Override
public void onClick(View v) {
    if (v.getId() == R.id.checkbox) {
        Toast.makeText(getActivity(), "Checkbox pressed", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(getActivity(), "Item pressed", Toast.LENGTH_SHORT).show();
    }
}

@Override
public View newView(Context arg0, Cursor arg1, ViewGroup arg2) {
    LayoutInflater layoutInflater = getActivity().getLayoutInflater();
    TransactionItem view = (TransactionItem) layoutInflater.inflate(R.layout.list_item, arg2, false);
    view.setOnClickListener(TransactionListFragment.this);
    // View checkBox = view.findViewById(R.id.checkbox);
    // checkBox.setOnClickListener(TransactionListFragment.this);
    bindToExistingView(view, arg1);
    return view;
}
4

2 に答える 2

0

onClickイベントをButton設定できます。また、やなどのクリック可能なアイテムへのフォーカスを無効にすることを忘れないでください。CyrilMottierからの2つの非常に詳細なブログ投稿があります。詳細な手順と問題の修正方法について説明します。カスタムボタンとチェックボックスで問題が部分的に修正されました。onCheckedChangeCheckBoxgetViewButtonCheckBoxDon’t press everything!

    package com.cyrilmottier.android.listviewtipsandtricks.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;

public class DontPressWithParentButton extends Button {

    public DontPressWithParentButton(Context context) {
        super(context);
    }

    public DontPressWithParentButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DontPressWithParentButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setPressed(boolean pressed) {
        if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
            return;
        }
        super.setPressed(pressed);
    }

}

ListViewのヒントとコツ#4:クリック可能な領域をいくつか追加する

ListViewのヒントとコツ#5:拡大されたタッチ可能な領域

于 2012-08-28T14:44:11.043 に答える
0

チェックボックスでこのコンボを試してください。

    android:focusable="false"
    android:focusableInTouchMode="false"
于 2012-08-28T14:37:56.060 に答える