2016-01-20 3 views
0

Каждый элемент моего списка содержит флажок.Android checkbox + listview issue

Я хочу, чтобы CheckBox был проверен/не установлен, всякий раз, когда я нажимаю на строку своего ListView. Теперь CheckBox и пункт ListView являются двумя разделенными вещами, что означает, что я могу нажать на элемент 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, чтобы не щелкнуть мышью, установив android:clickable="false" в свой xml. затем, когда пользователи нажимают на элементы, а OnItemClickListener срабатывает, вы должны вручную переключить свое состояние CheckBox.

+0

В этом упражнении я не использую 'EditText' ... Я не получаю ваш ответ – clementino36

+0

Извините, это была ошибка. Я имею в виду 'CheckBox'. см. мой отредактированный ответ. –

+0

Ну, как вы можете видеть в коде, который я опубликовал, 'android: clickable' уже установлен на' false' – clementino36

-1

Я думаю, что вы должны применяться только onclicklistener на вашем NewView который будет активирован, когда вид нажата, а затем и может переключать флажок на основе его положения.