Android listview onclicklistener无法使用复选框

时间:2012-02-24 23:35:55

标签: android listview checkbox

在我的列表视图中,有一个复选框,textviews和一个imageview。当我点击某个项目时,onclicklistnere无效。我知道这是因为复选框有自己的监听器,它会覆盖listview onclicklistener。精细。当我设置

android:focusable="false"
android:focusableInTouchMode="false"

在复选框中,我可以单击列表项,但复选框也是橙色(如项目)。

所以这是一个半解决方案,有人知道更好的吗?

这是班级:

    public class ListViewTutorial2Activity extends Activity {

    SimpleAdapter mSchedule;
    ListView list;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        list = (ListView) findViewById(R.id.SCHEDULE);

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("train", "101");
        map.put("from", "6:30 AM");
        map.put("to", "7:40 AM");
        mylist.add(map);
        map = new HashMap<String, String>();
        map.put("train", "103(x)");
        map.put("from", "6:35 AM");
        map.put("to", "7:45 AM");
        mylist.add(map);
         mSchedule = new SimpleAdapter(this, mylist, R.layout.row,
                    new String[] {"train", "from", "to"}, new int[] {R.id.TRAIN_CELL, R.id.FROM_CELL, R.id.TO_CELL});
        list.setAdapter(mSchedule);

        list.setOnItemClickListener(new OnItemClickListener() 
        {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
             Object o = list.getItemAtPosition(position);
            }
        });
    }
}

和row.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="4dip"
     android:paddingBottom="6dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">
    <CheckBox
        android:id="@+id/check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:descendantFocusability="beforeDescendants">
    </CheckBox>
     <TextView android:id="@+id/TRAIN_CELL"
         android:layout_width="50dip"
         android:layout_height="wrap_content"/>

     <TextView android:id="@+id/FROM_CELL"
         android:layout_width="70dip"
         android:layout_height="wrap_content" android:layout_weight="1"/>

     <TextView android:id="@+id/TO_CELL"
         android:layout_width="60dip"
         android:layout_height="wrap_content"  android:layout_weight="1"/>

            <ImageView
        android:id="@+id/icon"
        android:layout_width="22px"
        android:layout_height="22px"
        android:layout_marginLeft="4px"
        android:layout_marginRight="10px"
        android:layout_marginTop="4px"
        android:src="@drawable/icon" >
    </ImageView>
</LinearLayout>

5 个答案:

答案 0 :(得分:7)

您是否尝试将其添加到xml布局中的CheckBox

android:focusable="false"
android:focusableInTouchMode="false"

这对我有用,可能是一个比你必须经历的更好的解决方案。

答案 1 :(得分:1)

您不需要在CheckBox上设置任何特殊属性来执行此操作。但是,在ListView中,请尝试以下操作:

android:clickable="true"
android:descendantFocusability="beforeDescendants"

如果这不起作用,你可能在其他地方做错了。

答案 2 :(得分:1)

android:focusable="false"

它将在此上下文中解决问题

答案 3 :(得分:0)

我在RecyclerView上遇到了这个问题,也许这个答案对某些人有用。 所有这些答案都没有帮助我。也许这个解决方案并不是最优的,但这里是:

    = f.text_area :content, :class => "tinymce", :rows => 40, :cols => 120
    ...
    ...

    :javascript
      tinyMCE.init({
        selector: 'textarea.content'
        language: 'pl'
      });

我添加了ViewGroup包装器(在本例中为FrameLayout) - 并将click侦听器设置为FrameLayout: (就我的情况而言,ButterKnife):

<FrameLayout
            android:id="@+id/like"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/views_holder"
            android:layout_toEndOf="@+id/btn_comment"
            android:clickable="true">

            <CheckBox
                android:id="@+id/cb_like"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/pressable_size"
                android:gravity="center_vertical"
                android:button="@drawable/ic_heart_checkbox"
                android:paddingStart="8dp"
                android:paddingEnd="8dp"
                android:clickable="false"
                android:focusable="false"
                android:focusableInTouchMode="false"
                tools:text="324"
                />

        </FrameLayout>

R.id.like - FrameLayout,cbLike(CheckBox)。 它工作正常。

答案 4 :(得分:0)

即使我将其添加到复选框

,我也有同样的问题
android:clickable="false"
android:focusableInTouchMode="false"
android:focusable="false

然后我意识到我的问题是因为我有一个onStateChangedListener的复选框