2013-12-23 49 views
0

所以我的問題是關於在listView中註冊checkBox點擊。理想情況下,我希望沿着整個視圖的線條引起checkBox打開/關閉。我看到這個工作的唯一方法是在getView()函數中使用庫存convertViewsetOnClickListener,然後手動查找哪個視圖並更改了複選框。有沒有更好的辦法?看起來效率很低。在listView中註冊checkBox切換的最佳方式

回答

0

我以你描述的相同方式做了。在您將適配器的getView()方法內膨脹的XML文檔,添加此屬性:

android:onClick="myMethod"; 

然後你的活動中,申報myMethod的,就像這樣:

public void myMethod(View v) { 
    CheckBox cb = (CheckBox) v.findViewById(R.id.targetId); 
    cb.setChecked(!cb.isChecked); 
} 
+0

這很漂亮。我正在使用片段,並且我希望複選框在列表視圖中被檢查,而不僅僅是checkBox切換。這種方法仍然適用於這種情況嗎? – cj1098

+0

是的,如果您將'onClick'屬性設置爲填充AdapterView的佈局,那麼只要您單擊的對象連接到(使用子節點)到使用'myMethod(View v)'作爲它的onClick方法。 – NitroNbg

1

什麼,你也可以做的是確定自定義視圖:

checkable_row_view.xml:

<LinearLayout> 
    <Checkbox 
     android:id="@+id/checkbox/> 
    <TextView 
     android:id="@+id/textview/> 
</LinearLayout> 


public class CustomListviewItem extends LinearLayout implements Checkable{ 
    private TextView text; 
    private Checkbox checkbox; 
    private MyObject myObject; //the model class of the items you're displaying 

    public CustomListviewItem(Context context){ 
     super(context); 
    } 

    public CustomListviewItem(Context context, AttributeSet attrs){ 
     super(context, attrs); 
     LayoutInflater inflater = LayoutInflater.from(context); 
     inflater.inflate(R.layout.checkable_row_view, this); 
     text = findViewById(...); 
     checkbox = findViewById(...); 
    } 

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

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

    @Override 
    public void toggle(){ 
     myObject.setChecked(!myObject.isChecked()); 
     checkbox.setChecked(!checkbox.isChecked()); 
    } 

    public void setText(String text){ 
     this.text.setText(text); 
    } 


    public void setMyObject... 
} 

custom_item_view.xml:

<my.awesome.CustomListviewItem 
     width and height stuff here... /> 
在適配器

static class ViewHolder{ 
    public CustomListviewItem customListviewItem; 
} 

@Override 
public View getView(position, convertView, parent){ 
    //do viewholder stuff 

holder.customListviewItem.setText(theText); 
holder.customListviewItem.setChecked(shouldBeChecked) 
} 

務必將您的列表視圖的選擇模式CHOICE_MODE_MULTIPLE和使用R.layout.custom_item_view作爲您的適配器您的項目佈局。

相關問題