我有一个自定义的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 :(得分:0)
可能会将新的OnClickListener()更改为setOnClickListener中的新View.OnClickListener()。
答案 1 :(得分: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" >
然后在java文件中按ID查找:
mLayout = (LinearLayout) li.inflate(R.layout.probe_item_checkbox, this, true);
mLayout2 = (LinearLayout) findViewById(R.id.probe_item_checkbox_item_layout);
在mLayout2
上设置点击监听器