【问题标题】:How to customize the list items in an Android AlertDialog如何在 Android AlertDialog 中自定义列表项
【发布时间】:2011-04-05 09:24:56
【问题描述】:

我想使用 AlertDialog 为列表中的每个项目显示具有不同文本样式的多行,但没有任何示例。

有谁知道如何自定义 AlertDialog 的项目?还是我真的必须为此创建一个带有 ListView 的 Activity?

【问题讨论】:

    标签: android list customization android-alertdialog


    【解决方案1】:

    AlertDialog.Builder 上使用setAdapter() 为您的列表提供您自己的自定义ListAdapter

    【讨论】:

      【解决方案2】:

      编辑:顺便说一句,我做了一些更改以实际显示不同的图标:

      list_item.xml:

      <LinearLayout
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="horizontal"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content">
      
          <ImageView
              android:id="@+id/icon"
              android:contentDescription="@string/icon_descr"
              android:layout_width="48dp"
              android:layout_height="48dp"
              android:layout_gravity="left" />
      
          <TextView
              android:id="@+id/title"
              android:text=""
              android:paddingLeft="10dip"
              android:layout_gravity="center"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content" />
      </LinearLayout>
      

      进入你的活动:

      // dialog list entries
      final String[] items = {
          getString(R.string.entry_0),
          getString(R.string.entry_1),
          getString(R.string.entry_2)
      };
      
      // dialog list icons: some examples here
      final int[] icons = {
          android.R.drawable.ic_menu_edit,
          android.R.drawable.ic_menu_send,
          android.R.drawable.ic_menu_delete
      };
      
      ListAdapter adapter = new ArrayAdapter<String>(
          getApplicationContext(), R.layout.list_item, items) {
      
          ViewHolder holder;
      
          class ViewHolder {
              ImageView icon;
              TextView title;
          }
      
          public View getView(int position, View convertView, ViewGroup parent) {
          final LayoutInflater inflater = (LayoutInflater) getApplicationContext()
              .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      
          if (convertView == null) {
              convertView = inflater.inflate(
              R.layout.list_item, null);
      
              holder = new ViewHolder();
              holder.icon = (ImageView) convertView
              .findViewById(R.id.icon);
              holder.title = (TextView) convertView
              .findViewById(R.id.title);
              convertView.setTag(holder);
          } else {
              // view already defined, retrieve view holder
              holder = (ViewHolder) convertView.getTag();
          }     
      
          holder.title.setText(items[position]);
      
          holder.icon.setImageResource(icons[position]);
          return convertView;
          }
      };
      
      // ----------
      
      AlertDialog.Builder builder = new AlertDialog.Builder(myActivity.this);
      
      builder.setTitle("title");
      
      builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int which) {
              // ---
          }
      
      });
      
      builder.create();
      if (! ((Activity) myActivity.this).isFinishing()) {
          builder.show();
      }
      

      【讨论】:

      • 这给了我错误IllegalStateException: System services not available to Activities before onCreate
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多