【问题标题】:Android CheckBox inside ListView is not clickable while onItemClickedListener works当 onItemClickedListener 工作时,ListView 内的 Android CheckBox 不可点击
【发布时间】:2014-04-16 16:34:18
【问题描述】:

我在 ListView 的行项目中使用 CheckBox。将 CheckBox 设置为android:focusable="false"。因此 ListView 的 OnItemClickListener 工作正常,但复选框似乎不可点击。我该如何解决这个问题?

在我的自定义 arrayAdapter 中:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        FileHolder holder;
        if(v == null){
            LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater();
            v = inflater.inflate(layoutResourceId, parent, false);
            holder = new FileHolder();
            holder.isChecked = (CheckBox)v.findViewById(R.id.checkBox1);
            v.setTag(holder);
            holder.isChecked.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    Log.d("common", "checked");
                }

            });
        }
}

在 row_item.xml 中:

<CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" 
        android:button="@drawable/checkbox"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:clickable="true"/>

编辑:我尝试注册一个 OnTouchListener,但也没有调用 onTouch()。

【问题讨论】:

标签: android listview android-listview focus android-checkbox


【解决方案1】:

我认为您不应该将 focusable 和 focusableInTouchMode 设置为 false。 膨胀布局时尝试将 parent 设置为 null

v = inflater.inflate(layoutResourceId, null, false);

希望它会有所帮助。

我还认为,如果您的列表很长,您将遇到性能问题。如果您列出的行很多,不鼓励在 getView(int position, View convertView, ViewGroup parent) {} 上创建 new OnClickListener(){}。在侦听器实例上创建为所有行设置它。您可以使用标签来确定点击哪个视图。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-01-22
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多