我有一个DialogFragment,它显示带有单选按钮的单选项。
这是我的代码:
SimpleAdapter simpleAdapter = new SimpleAdapter(
getActivity(),
listItem, //this is a hashmap
R.layout.my_custom_list_item,
new String[] { "id", "name", "status" },
new int[] { R.id.textview_ID, R.id.textview_name, R.id.textview_status });
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title").setSingleChoiceItems(simpleAdapter, 0, //check the first item
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInteface,int position) {
//do something
}
}).setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int id) {
//do something
}
});
我在另一个地方使用ArrayAdapter
和android.R.layout.simple_list_item_single_choice
,并检查第一项。请注意,我已将0
提供给checkedItem
参数。我认为我的自定义布局存在问题。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10sp"
android:paddingRight="10sp"
android:paddingTop="2sp" >
<RadioButton
android:id="@+id/selected_cert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginRight="15dp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textview_ID"
android:layout_width="fill_parent"
android:layout_height="29dp"
android:layout_marginTop="5dp"
android:textSize="16sp"
android:textStyle="bold"
android:typeface="sans" >
</TextView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="28dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name :"
android:textSize="13sp"
android:textStyle="bold" >
</TextView>
<TextView
android:id="@+id/textview_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp" >
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="30dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Satatus:"
android:textSize="13sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textview_qualifiedstatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
如何在用户打开对话框片段时选择第一个自定义项目。
答案 0 :(得分:1)
我发现我需要创建自定义LinearLayout并实现Checkable接口。然后将其用作列表项的根视图。
我的自定义LinearLayout:
public class CheckableLinearLayout extends LinearLayout implements Checkable {
RadioButton mRadioButton;
public CheckableLinearLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CheckableLinearLayout(Context context) {
super(context);
}
public CheckableLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
findCheckableView(this);
}
//finds RadioButton recursively (comment if you know a better way to do that)
void findCheckableView(ViewGroup parent) {
for (int i = 0; i < parent.getChildCount(); i++) {
View child = parent.getChildAt(i);
if (child instanceof ViewGroup) {
findCheckableView((ViewGroup) child);
} else if (child != null) {
if (child instanceof RadioButton) {
mRadioButton = (RadioButton) child;
}
}
}
}
@Override
public void setChecked(boolean checked) {
if (mRadioButton != null) {
mRadioButton.setChecked(checked);
}
}
@Override
public boolean isChecked() {
return mRadioButton != null ? mRadioButton.isChecked() : false;
}
@Override
public void toggle() {
if (mRadioButton != null) {
mRadioButton.toggle();
}
}
}
我的列表项
<com.foo.customViews.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10sp"
android:paddingRight="10sp"
android:paddingTop="2sp" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="87dp"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginRight="15dp" />
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="29dp"
android:layout_marginTop="5dp"
android:textSize="16sp"
android:textStyle="bold"
android:typeface="sans" >
</TextView>
</LinearLayout>
<!-- some more views -->
</com.foo.customViews.CheckableLinearLayout>
这篇文章对我有所帮助: http://tokudu.com/post/50023900640/android-checkable-linear-layout