2016-01-20 133 views
0

我的listview中的每一项都包含一个复选框。Android复选框+ listview问题

我想CheckBox被检查/取消选中,只要我点击我的ListView的一排。现在,CheckBoxListView项目是两个分开的东西,这意味着我可以点击ListView项目(位于复选框“后面”)或CheckBox

问题是,如果我点击CheckBox,它不会触发itemClickListener(这是合乎逻辑的,因为它们是分开的)。

所以我想要的是项目和复选框“一体”工作。

这里是我的代码的相关部分:

活动:

listView.setAdapter(new FoodTypeAdapter(this, foodTypeList)); 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      CheckBox cb = (CheckBox) view.findViewById(R.id.foodType); 
      if (cb.isChecked()) { 
       intent.putExtra("position", position); 
      } 
     } 
    }); 

适配器:

private boolean[] checkBoxState; 

public FoodTypeAdapter(Context context, List<FoodType> foodTypeList) { 
    this.foodTypeList = foodTypeList; 
    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    checkBoxState = new boolean[foodTypeList.size()]; 
} 

static class ViewHolder { 
    protected CheckBox foodType; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View newView; 
    if (convertView == null) { 
     newView = inflater.inflate(R.layout.food_type_row, null); 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.foodType = (CheckBox) newView.findViewById(R.id.foodType); 
     newView.setTag(viewHolder); 
    } else { 
     newView = convertView; 
    } 

    final ViewHolder holder = (ViewHolder) newView.getTag(); 

    holder.foodType.setText(foodTypeList.get(position).getName()); 
    holder.foodType.setChecked(checkBoxState[position]); 
    holder.foodType.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (((CheckBox) v).isChecked()) { 
       checkBoxState[position] = true; 
      } else { 
       checkBoxState[position] = false; 
      } 
     } 
    }); 

    return newView; 
} 

的ListView行:

<CheckBox 
    android:id="@+id/foodType" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:focusable="false" 
    android:clickable="false" 
    android:text="Checkbox" 
    android:textSize="16sp"/> 

我知道有很多关于这个已经存在的话题,但我还没有找到一个有同样的问题...

请帮助我!

回答

1

我认为你应该让你的CheckBox s不能通过在你的xml中设置android:clickable="false"来点击。那么当用户点击物品并触发OnItemClickListener时,应该手动切换CheckBox的状态。

+0

我没有在这个活动中使用任何'EditText' ...我没有得到你的答案 – clementino36

+0

抱歉,这是一个错误。我的意思是'CheckBox'。看到我编辑的答案。 –

+0

就像你在我发布的代码中看到的一样,'android:clickable'已经设置为'false' – clementino36

-1

我想你应该在你的NewView的单击视图时将被激活,然后ü可以切换其位置的基础上的复选框仅适用onclicklistener