ListViewの中にCheckBoxを入れるとsetOnItemClickListenerが動作しない

Android

ListViewの中にCheckBoxを入れるとsetOnItemClickListenerが動作しない サンプルコード有り

マニアックな話かもしれませんが、下記のスクショのように、リストビューの中に、チェックボックスを入れたい場合です。
普通にやると、チェックボックスは動作しますが、リストのタップしたところを判定して動作させるというのが動きません。

list_check.png

 android:descendantFocusability="blocksDescendants"

を利用するとリストをタップできるようになります。
ここでは、inspections_list.xml内に利用しています。使うところがなんかわかりにくいですよね!

    @Override
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listplaceholder_inspections);
 
        CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox);
 
        try {
 
            mylist = new ArrayList<HashMap<String, String>>();
 
            HashMap<String, String> map1 = new HashMap<String, String>();
            map1.put("item_name", "燃料");
            map1.put("detail", "量・漏れ");
            mylist.add(map1);
 
            HashMap<String, String> map2 = new HashMap<String, String>();
            map2.put("item_name", "エンジン");
            map2.put("detail", "かかり具合・異音");
            mylist.add(map2);
 
            ListAdapter adapter = new SimpleAdapter(this, mylist,
                    R.layout.inspections_list, new String[] {
                            "item_name", "detail", "problem_comment"
                    },
                    new int[] {
                            R.id.item_name, R.id.detail, R.id.problem_comment
                    });
            setListAdapter(adapter);
            final ListView lv = getListView();
            lv.setTextFilterEnabled(true);
            lv.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent,
                        View view, int position, long id) {
                    //リストをクリックした時の処理
                    int item_id = position;
                }
            });
 
        } catch (Exception e) { 
 
             Log.e(TAG, "Error parsing data " + e.toString());
 
        }
    }

inspections_list.xmlの内容

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="7dp" 
    android:descendantFocusability="blocksDescendants">
 
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dip"
        android:orientation="horizontal" >
 
        <TextView
            android:id="@+id/item_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/green1"
            android:textSize="18sp" />
    </LinearLayout>
 
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
 
        <TableRow>
 
            <TextView
                android:id="@+id/detail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="1dp"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textSize="18sp" />
            <CheckBox
                android:id="@+id/checkbox"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </TableRow>
 
        <TableRow>
 
            <TextView
                android:id="@+id/problem_comment"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_span="2"
                android:padding="1dp"
                android:text="@string/problem"
                android:textColor="@color/orange4"
                android:textSize="13sp" />
        </TableRow>
    </TableLayout>
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="1dp"
        android:text="@string/problem"
        android:textColor="@color/orange4"
        android:textSize="13sp" />
 
 </LinearLayout>

listplaceholder_inspections.xmlの内容

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <ListView
        android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:divider="#cccccc"
        android:dividerHeight="1px" 
        android:focusable="false"
        />
 
    <TextView
        android:id="@id/android:empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/fetching" />
 
 
 </LinearLayout>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です