`
lj_gzy2014
  • 浏览: 18260 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于listview的item布局中包含的checkbox无法点击的解决办法

阅读更多

             最近在公司写下面一个界面时,遇到了一个bug,item可以点击,但是checkbox无法点击选中

下面是我之前写的一个item的自定义布局类:

package com.chemanman.manager.view.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.Checkable;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.chemanman.manager.R;

/**
 * 作者:dream on 2016/3/29 18:53
 * 邮箱:1774866723@qq.com
 */
public class PaymentSingleView extends LinearLayout {

    CheckBox ivIsCheck;
    DisplayView viewWayBillNo;
    TextView tvWayBillTime;
    TextView tvFromAndTo;
    DisplayView viewPayMethordAndValue;
    TextView tvSenderAndReceiver;
    TextView tvDescriptionInfo;

    public PaymentSingleView(Context context) {
        super(context);
        initView(context);
    }

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

    public PaymentSingleView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }
    private void initView(Context context) {
        // 加载view
        LayoutInflater inflater = LayoutInflater.from(context);

        View convertView = inflater.inflate(R.layout.list_item_payment_nopay, this, true);
       ivIsCheck= (CheckBox) convertView.findViewById(R.id.check_payment);
        tvFromAndTo= (TextView) convertView.findViewById(R.id.from_and_to);
       tvDescriptionInfo= (TextView) convertView.findViewById(R.id.description_info);
       tvSenderAndReceiver= (TextView) convertView.findViewById(R.id.sender_and_receiver);
        tvWayBillTime= (TextView) convertView.findViewById(R.id.way_bill_time);
       viewWayBillNo= (DisplayView) convertView.findViewById(R.id.way_bill_no);
       viewPayMethordAndValue= (DisplayView) convertView.findViewById(R.id.payMethod_and_value);
    }
}


 

界面显示都没有问题,但是就是checkbox无法选中,查了一些资料,发现item的外部监听会掩盖内部子组件的监听事件
有一种办法是让自定义的布局类实现Checkable接口,代码更改如下:
package com.chemanman.manager.view.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.Checkable;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.chemanman.manager.R;

/**
 * 作者:dream on 2016/3/29 18:53
 * 邮箱:1774866723@qq.com
 */
public class PaymentSingleView extends LinearLayout implements Checkable {

    CheckBox ivIsCheck;
    DisplayView viewWayBillNo;
    TextView tvWayBillTime;
    TextView tvFromAndTo;
    DisplayView viewPayMethordAndValue;
    TextView tvSenderAndReceiver;
    TextView tvDescriptionInfo;

    public PaymentSingleView(Context context) {
        super(context);
        initView(context);
    }

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

    public PaymentSingleView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }
    private void initView(Context context) {
        // 加载view
        LayoutInflater inflater = LayoutInflater.from(context);

        View convertView = inflater.inflate(R.layout.list_item_payment_nopay, this, true);
       ivIsCheck= (CheckBox) convertView.findViewById(R.id.check_payment);
        tvFromAndTo= (TextView) convertView.findViewById(R.id.from_and_to);
       tvDescriptionInfo= (TextView) convertView.findViewById(R.id.description_info);
       tvSenderAndReceiver= (TextView) convertView.findViewById(R.id.sender_and_receiver);
        tvWayBillTime= (TextView) convertView.findViewById(R.id.way_bill_time);
       viewWayBillNo= (DisplayView) convertView.findViewById(R.id.way_bill_no);
       viewPayMethordAndValue= (DisplayView) convertView.findViewById(R.id.payMethod_and_value);
    }

    @Override
    public void setChecked(boolean checked) {
        ivIsCheck.setChecked(checked);
    }

    @Override
    public boolean isChecked() {
        return ivIsCheck.isChecked();
    }

    @Override
    public void toggle() {
        ivIsCheck.toggle();
    }

}
 

    实现Checkable接口,并设置checkbox的选择模式(sh)

mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    

  并在对应的xml布局文件中设置属性

android:clickable="true"
android:focusable="false"
  • 大小: 27.3 KB
分享到:
评论

相关推荐

    android 的listview 内部item的布局包含checkbox控件

    android 的listview 内部item的布局包含checkbox控件时,会遇到常见的问题:1.checkbox无法选择;2.选择的checkbox后滑动listview内容时会checkbox选择的值会刷新成原来状态值(即没选中);3.选择listview所有checkbox...

    带下拉刷新的ListView的中同时处理CheckBox,Button,和item事件

    关键在于监听CheckBox的单击事件,可以通过在`getView()`方法中设置CheckedChangeListener,或者在CheckBox的布局文件中定义一个OnCheckedChangeListener。然后在回调中更新相关数据源,并调用`notifyDataSetChanged...

    ListView添加CheckBox复选框

    2. 在适配器的`getView()`方法中,设置CheckBox并处理点击事件。 3. 使用convertView提高性能。 4. 定义接口回调,通知应用层选中状态变化。 5. 设置适配器到ListView上。 以上就是关于在Android中如何在ListView中...

    listview中添加CheckBox的完美实现

    这个解决方案可以将 ListView 子项中的 CheckBox 与 ListView 分离出来,即点击 ListView 的子项实现的是查看 ListView 子项的内容,点击子项中的 CheckBox 来实现 CheckBox 的选中与否。 首先,我们需要创建一个...

    ListView复用checkBox的解决方法

    总结来说,解决ListView复用checkBox的问题,关键在于适当地在`getView()`方法中设置checkBox的状态,并且在点击事件中更新数据源和选中计数。这样,即使视图被复用,也能确保每个checkBox的状态正确反映其对应的...

    ListView+CheckBox,实现批量删除与解决listview滚动checkBox选择状态絮乱

    这个项目是Android studio...3、点击ListViewItem选中响应Item里的CheckBox;4、计算选中的项数已经相应UI的隐显增强用户体验;5、自定义AlertDialog布局。全部自己研究编写,测试运行Ok,为真实项目的所用的简化Demo。

    listView中添加checkBox 案例 (项目中抽取出来的)

    然后在Adapter的`getView()`方法中,实例化这个布局,并将CheckBox与数据绑定: ```java @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if ...

    自定义Checkable控件实现点击ListViewItem选中checkbox

    然而,当需要在ListView的每一项中加入可勾选的checkbox时,我们不能简单地在item布局中添加一个标准的Checkbox,因为这会导致点击事件冲突,用户体验也会受到影响。为了解决这个问题,我们可以自定义一个Checkable...

    【Android】ListView与CheckBox的完美结合

    - 通常在ListView的item布局文件中添加CheckBox元素,并设置其初始状态。 3. **getView()方法** - 在自定义Adapter的getView()方法中,根据数据动态设置CheckBox的状态。 - 当数据改变时,调用Adapter的...

    ListView的CheckBox错位Demo

    在Adapter的getView()方法中,我们需要根据数据项的实际情况来设置CheckBox的选中状态。 例如: ```java public class CustomAdapter extends BaseAdapter { private List<DataItem> dataList; @Override ...

    ListView和CheckBox错位(解决)

    在Adapter中,我们需要为每个ListView的Item创建一个布局,该布局包含一个CheckBox。然后,我们可以在`getView()`方法中处理CheckBox的状态。 ```java public View getView(int position, View convertView, ...

    Listview区分内容和CheckBox的点击事件(AS工程)

    然后,在适配器的getView()方法中,可以为每个ListView项设置独立的点击监听器。对于CheckBox,我们可以设置CheckedChangeListener来监听其状态变化;对于ListView项本身,可以设置OnClickListener来处理文本的点击...

    listview嵌套checkbox

    为解决此问题,需要在getView()方法中设置CheckBox的状态,根据数据模型的选中状态进行初始化。 2. 事件冲突:ListView的点击事件和CheckBox的点击事件可能会相互干扰。通过设置OnCheckedChangeListener,确保只有在...

    listview中添加checkbox实现多选操作问题

    在`getView()`方法中,我们需要创建或复用一个包含Checkbox的布局。布局可以预先设计好,例如一个包含TextView和Checkbox的LinearLayout。然后,通过findViewById()方法找到Checkbox,将其设置为单选或多选模式,并...

    android listview 里面使用checkbox

    在这里,我们可以创建包含Checkbox的布局,并将它设置为ListView的item。 2. **CheckBox的布局**: - 在XML布局文件中,定义一个包含Checkbox的ListView item模板。例如: ```xml <CheckBox android:id="@+id/...

    android listview ScrollView冲突 listview checkbox

    解决这个问题的方法是在适配器中保存CheckBox的状态,并在getView()方法中根据这个状态设置CheckBox的选中与否。 此外,我们还可以使用onItemClickListener监听ListView的点击事件,这样在点击列表项时可以获取到...

    ListView有CheckBox,滑动混乱问题解决

    6. **避免在onItemClick()中操作CheckBox**:通常,ListView的`onItemClick()`事件会被CheckBox的点击事件截获,导致无法正常触发ListView的点击事件。因此,应避免在`onItemClick()`中直接操作CheckBox,而是在...

    ListVIew 实现Checkbox多选

    `getView()` 方法中,我们设置了Checkbox的文本和初始选中状态,并添加了一个CheckedChangeListener,当Checkbox的状态改变时,会触发这个监听器,更新对应位置的选中状态。 接下来,你需要在布局文件(如 `list_...

    C# ListView中添加多种自定义控件源码

    2. 在代码中,实例化这个自定义的ListViewItem,并为其创建一个CheckBox。 ```csharp CustomListViewItem item = new CustomListViewItem(); item.Text = "Item1"; item.CheckBox = new CheckBox(); item.CheckBox....

Global site tag (gtag.js) - Google Analytics