【问题标题】:AlertDialog's items not displayedAlertDialog 的项目未显示
【发布时间】:2012-05-29 16:54:14
【问题描述】:

我用AlertDialog.Builder 创建了一个AlertDialog,并用setItems() 设置了一些项目。显示对话框,但我看不到任何项目。我看到的只是消息。

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
dialogBuilder.setMessage("Pick a color");
dialogBuilder.setItems(items, new DialogInterface.OnClickListener() {        
    public void onClick(DialogInterface dialog, int which) {
        // Do anything you want here
    }    
});

dialogBuilder.create().show();

如果我设置PositiveButton,我可以看到那个按钮就好了。我也尝试设置MultiChoiceItemsSingleChoiceItems,但这些都不起作用。

【问题讨论】:

  • 尝试使用setTitle 而不是setMessage。因此,我假设构建器正在创建一个通常的消息对话框。
  • 哦,是的,没注意到 .. 它有效,谢谢!如何将此帖子标记为“已回答”?

标签: android android-alertdialog


【解决方案1】:

使用setTitle 代替setMessage 设置消息正文并覆盖项目列表。

【讨论】:

  • 在使用列表项和警报对话框时很难发现这一点。
  • 如何两者兼得?项目和消息?
  • @Armando,它有点隐藏,可能一直不存在,但它在对话框页面的Adding a List 部分中说明:“因为列表出现在对话框的内容区域,对话框不能同时显示消息和列表,您应该使用 setTitle() 为对话框设置标题。"
  • @哇谢谢。如果 API 有这个限制,linter 应该能够以与其他 Android 特定功能相同的方式向您发出警告。
【解决方案2】:

为什么不选择setTitle 而不是setMessage?试试setTitle("Pick a color")

希望对你有所帮助。

【讨论】:

    【解决方案3】:

    试试alertDialogBuilder.setCustomTitle(view)

    【讨论】:

      【解决方案4】:

      如果您想设置消息AND 项,只需使用setCustomTitle()TextView,如下所示:

      dialogBuilder.setCustomTitle(TextView(context).apply {
          setPadding(
             16.dpToPx().toInt(),
             16.dpToPx().toInt(),
             16.dpToPx().toInt(),
             0
          )
          setText(it.message)
          setTextColor(Color.BLACK)
          textSize = 18f
      })
      dialogBuilder.setItems(...)
      

      请注意,您不能以这种方式设置标题,但您当然可以创建自定义标题布局,支持同时设置标题消息。

      dpToPx() 只是一个简单的转换扩展功能,不在您的问题范围内,但为了完整起见,这里是:

      @JvmOverloads
      @Dimension(unit = Dimension.PX)
      fun Number.dpToPx(
          metrics: DisplayMetrics = Resources.getSystem().displayMetrics
      ): Float {
          return toFloat() * metrics.density
      }
      

      【讨论】:

        【解决方案5】:

        使用下面的代码:-

        final CharSequence[] items = {"Red", "Green", "Blue"};
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
        dialogBuilder.setTitle("Pick a color");
        dialogBuilder.setItems(items, new DialogInterface.OnClickListener() {
        
            public void onClick(DialogInterface dialog, int which) {
                // Do anything you want here
            }
        
        });
        dialogBuilder.create().show();
        

        【讨论】:

          【解决方案6】:

          试试这个

          final CharSequence[] items = {"Red", "Green", "Blue"};
          AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
          dialogBuilder.setTitle("Pick a color");
          dialogBuilder.setSingleChoiceItems(items,-1, new DialogInterface.OnClickListener()
          @Override
          public void onClick(DialogInterface dialog, int which) 
          {
          }
          });
          dialogBuilder.show();
          

          【讨论】:

          • setSingleChoiceItems 本质上与setItems 相同:它仍然是setMessage 独有的。唯一的区别是,如果您要实现持久选择,则会为“单选”显示单选按钮。
          【解决方案7】:

          如果您使用的是资源字符串数组,则必须包含资源包装。 context().getResources().getStringArray(R.array.items);

          我的列表没有通过使用 R.array.items 显示,直到我为指针提供上下文和资源打包。

          祝你好运!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-12-06
            • 2021-12-17
            • 2020-07-03
            • 2012-12-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多