多选对话框的自定义行布局

时间:2014-02-23 16:47:07

标签: android listview layout dialog checkedtextview

我想实现一个Custom Multiple Choice Dialog,按照this answer的指示,这就是我所做的:

我为我的行创建了xml,这是CheckedTextView

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:textColor="#000000"
    android:fontFamily="sans-serif-condensed"
    style="?android:textAppearanceSmall"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:clickable="true"/>

现在,我的Dialog

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setAdapter(
                new ArrayAdapter<String>(getActivity(),
                        R.layout.dialog_list_item, tables), null)
        // Set the action buttons
                .setPositiveButton(android.R.string.ok,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.dismiss();
                            }
                        });
AlertDialog alertDialog = builder.create();

alerDialog.show();

正如您所看到的,我还没有实现setOnItemClickListener,但我不知道如何。但是,Dialog看起来很好。如何为每个CheckedTextView

调用ClickListener

比你非常

2 个答案:

答案 0 :(得分:2)

@Rahul Gupta建议在实施ListViewOnItemClickListener后的工作方式,但如果ListView包含太多项目,那么未显示的Views是也将被“检查”。我想,在用户实际向下滚动并查看其余项目之前,尚未生成Views

我开展工作的方式是使用Layout创建ListView并将choice mode的值设置为CHOICE_MODE_MULTIPLE。在这种情况下,我不必处理每个项目,但我可以使用listview.getCheckedItemPositions()

检索所选项目的数组
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater li = LayoutInflater.from(getActivity());
View view= li.inflate(R.layout.listview_dialog, null);
builder.setView(view);
builder.setTitle(title);

listView = (ListView) view.findViewById(R.id.listview);

ArrayAdapter<String> ad = new ArrayAdapter<String>(getActivity(), R.layout.dialog_list_item , R.id.text2, tables);
listView.setAdapter(ad);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setDivider(null);

builder.create();

答案 1 :(得分:0)

是的,您可以为CheckedTextView实现onClickListener。

你必须找到它的参考。现在,就像在对话框中一样,你必须这样做: -

CheckedTextView dialogCheckedTextView = (CheckedTextView ) alertDialog.findViewById(R.id.yourcheckedtextboxid);
dialogCheckedTextView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     //TODO
    }
 });