2014-11-15 45 views
0

我有一個自定義的LinearLayout視圖,其中只有一個TextView和一個CheckBox。我似乎無法讓複選框在佈局的任何部分被選中時切換。我搜索了四周,大部分我看到的是將CheckBox上的可聚焦屬性設置爲false,而我已經完成了這些。通過單擊行佈局切換複選框

我有一個類似的組件與兩個文本視圖,並onClick作品。

佈局:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:descendantFocusability="beforeDescendants" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/probe_item_label" 
     style="@style/Probe.Item.Text.Label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" 
     android:layout_marginBottom="3dp" 
     android:layout_weight="0" /> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

    <CheckBox 
     android:id="@+id/probe_item_checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:layout_weight="0" 
     android:focusable="false" 
     android:focusableInTouchMode="false" /> 

</LinearLayout> 

類:

public class ProbeItemCheckBox extends LinearLayout 
{ 
    LinearLayout mLayout = null; 
    TextView mLabelTextView = null; 
    CheckBox mCheckbox = null; 

    Context mContext = null; 

    public ProbeItemCheckBox(Context context) 
    { 
     super(context); 
    } 
    public ProbeItemCheckBox(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 

     mContext = context; 

     TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ProbeText); 

     final String labelText = a.getString(R.styleable.ProbeText_labelText); 

     String service = Context.LAYOUT_INFLATER_SERVICE; 
     LayoutInflater li = (LayoutInflater) getContext().getSystemService(service); 

     mLayout = (LinearLayout) li.inflate(R.layout.probe_item_checkbox, this, true); 

    // layout.setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS); 

     mLabelTextView = (TextView)mLayout.findViewById(R.id.probe_item_label); 
     mCheckbox = (CheckBox)mLayout.findViewById(R.id.probe_item_checkbox); 

     mCheckbox.setFocusable(false); 
     mCheckbox.setFocusableInTouchMode(false); 

     mLabelTextView.setText(labelText); 
     mLabelTextView.setClickable(false); 

     mCheckbox.setClickable(false); 
     mLayout.setClickable(true); 

     mLayout.setOnClickListener(new OnClickListener() 
     { 
     @Override 
     public void onClick(View v) 
     { 
      mCheckbox.toggle(); 

     } 

     }); 
     a.recycle(); 
    } 
... 
} 

你可以提供任何幫助,將不勝感激。

+0

你說的切換是什麼意思? – Chitrang

+0

@Chitrang切換該行中的複選框未選中時的意思,單擊該行中的任意位置將檢查框,同樣取消選中。 –

回答

0

我得到它的工作。我必須通過ID在xml文件中找到最高層的LinearLayout,並在該對象上設置onClickListener。

新增ID在佈局文件:

LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/probe_item_checkbox_item_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/btn_settings" 
    android:descendantFocusability="beforeDescendants" 
    android:orientation="horizontal" 
    style="@style/Probe.Item.Layout" > 

,然後通過ID在java文件中找到:

mLayout = (LinearLayout) li.inflate(R.layout.probe_item_checkbox, this, true); 

    mLayout2 = (LinearLayout) findViewById(R.id.probe_item_checkbox_item_layout); 

坐落在點擊監聽器mLayout2

0

可能將新的OnClickListener()更改爲setOnClickListener中的新View.OnClickListener()。

參考:how to set onClick method with linearLayout?

+0

謝謝,但沒有奏效。它已經在View類中使用了OnClickListener,但僅僅用於踢我添加它,並沒有幫助。 –