问题1:

listview item不可以点击 checkbox可以选择(由于有些控件抢占点击)

参考 AbListView源代码:

final boolean inList = x > mListPadding.left && x < getWidth() - mListPadding.right;if (inList && !child.hasFocusable()) {    if (mPerformClick == null) {        mPerformClick = new PerformClick();    }    final AbsListView.PerformClick performClick = mPerformClick;    performClick.mClickMotionPosition = motionPosition;    performClick.rememberWindowAttachCount();
如果子控件hasFocusable为false才可以正常点击(如果子控件具备抢占焦点的能力会影响到Item的点击事件)。

解决:

xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="wrap_content"    tools:context=".MainActivity"    android:descendantFocusability="blocksDescendants"    android:padding="10dp">            android:id="@+id/id_cb"        android:focusable="false"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_centerVertical="true"/>


1:该父控件设置 android:descendantFocusability="blocksDescendants"  后就不用设置子控件了。
2::所有抢占焦点的控件(CheckBox Button)  设置android:focusable="false"
2.首页第一个CheckBox被选中后,第二页第一个Checkbox也被选中问题。
checkbox复用问题解决办法:
1:
给业务对象添加一个属性(推荐最简单)
   
public boolean isChecked() {    return isChecked;}public void setIsChecked(boolean isChecked) {    this.isChecked = isChecked;}private boolean isChecked;

getView中:
   
final CheckBox cb = holder.getView(R.id.id_cb);cb.setChecked(bean.isChecked());cb.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        bean.setIsChecked(cb.isChecked());    }});
点击后设置对应类的IsChecked属性,当getView被调用时根据这个属性更改Checked值。
   
2:
全局定义一个List记录checkbox true的position
在getView中
   
final CheckBox cb = holder.getView(R.id.id_cb);cb.setChecked(false);if (mPos.contains(holder.getPosition())) {    cb.setChecked(true);}//cb.setChecked(bean.isChecked());cb.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        if(cb.isChecked())            mPos.add(holder.getPosition());        else        {            mPos.remove((Integer)holder.getPosition());        }       // bean.setIsChecked(cb.isChecked());    }});

更多相关文章

  1. [Android]搜索界面--自动弹出键盘,并点击键盘搜索进行搜索
  2. BadgeView 与 RadioButton
  3. ListView.setOnItemClickListener 点击无效
  4. android 日期选择器自由天数内展示
  5. 如何防止android Toast重复显示?
  6. Win7上Git安装及简单配置过程
  7. Android(安卓)requires compiler compliance level 5.0 or 6.0.
  8. Android入门(2) 基本控件介绍、4种布局
  9. android 开发 时间选择器TimePicker的使用

随机推荐

  1. 【Android】5.3 单选和复选
  2. Android使用SimpleAdapter
  3. android通过http上传文件(图片)
  4. Android中如何在Eclipse中关联源代码?(图文
  5. Android(安卓)studio打包遇到的问题以及
  6. cocos2d-x 3.0rc2中读取sqlite文件
  7. Android中元素按比例布局
  8. Android从零开始
  9. android获取各种路径的方法
  10. Android(安卓)studio问题小记--- Cause: