2016-01-20 142 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