【发布时间】:2011-12-08 05:51:46
【问题描述】:
我有这个列表视图项的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/backgroundTela">
<TextView
android:id="@+id/tvwLvItem"
android:layout_width="0sp"
android:layout_height="50sp"
android:layout_weight="8"
android:layout_gravity="center"
android:text="Texto"
style="@style/lvwTexto">
</TextView>
<RadioButton
android:id="@+id/rdbDefault"
android:layout_width="0sp"
android:layout_height="wrap_content"
android:layout_weight="1.2"/>
</LinearLayout>
我希望我的用户只选择一项,如何控制?例如,他选择第二个项目,然后所有其他项目保持未选中状态,当他选择其他项目时,所有其他项目保持未选中状态。
解决方案:
在 ListView 项目布局中使用这个类:
public class CheckableLinearLayout extends LinearLayout implements Checkable {
private CheckedTextView _checkbox;
public CheckableLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
// find checked text view
int childCount = getChildCount();
for (int i = 0; i < childCount; ++i) {
View v = getChildAt(i);
if (v instanceof CheckedTextView) {
_checkbox = (CheckedTextView) v;
}
}
}
@Override
public boolean isChecked() {
return _checkbox != null ? _checkbox.isChecked() : false;
}
@Override
public void setChecked(boolean checked) {
if (_checkbox != null) {
_checkbox.setChecked(checked);
}
}
@Override
public void toggle() {
if (_checkbox != null) {
_checkbox.toggle();
}
}
}
现在您只需要在 Layout Item 中使用 CheckedTextView:
<com.developer_lib.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="@dimen/dimDefaultButtonMeasures"
android:background="@drawable/list_item_background"
android:orientation="horizontal" >
<ImageView
android:contentDescription="@string/cd_contato_foto"
android:id="@+id/imvFoto"
android:layout_width="@dimen/dimDefaultButtonMeasures"
android:layout_height="@dimen/dimDefaultButtonMeasures"
android:layout_gravity="center" />
<CheckedTextView
android:id="@+id/chlSelecao"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="2"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:ellipsize="marquee"
android:gravity="center_vertical"
android:padding="4dp"
android:singleLine="true" />
最后你的 Listview 将控制选择模式,例如:
<ListView
android:id="@+id/lvwHorarios"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice" />
【问题讨论】:
-
你找到解决办法了吗?你能分享一下吗?谢谢。
-
请分享你的解决方案..
标签: android listview radio-button