【问题标题】:Custom row Layout for a Multiple Choice Dialog多选对话框的自定义行布局
【发布时间】:2014-02-23 16:47:06
【问题描述】:

我想实现一个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?

非常感谢你

【问题讨论】:

    标签: android listview layout dialog checkedtextview


    【解决方案1】:

    @Rahul Gupta 建议的方式在实现 ListViewOnItemClickListener 后有效,但如果 ListView 包含太多项目,则未显示的 Views 也将被“检查” .我想Views 尚未生成,直到用户实际向下滚动并查看其余项目。

    我使它工作的方式是创建一个带有单个ListViewLayout,并将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();
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • NullPointerException dialogCheckedTextView.setOnClickListener.... 有什么想法吗?
      • 这只是你的做法。检查您是否通过了正确的参考
      • 我让它在listview.setOnItemClickListener...中实现它。但是,它最后给出了一个不同的问题,我不得不改变实现。最后,我找到了一种更适合我的情况的方法。不过还是谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      相关资源
      最近更新 更多