【安卓学习之UI学习】Dialog的使用总结3 - setAdapter和setItems区别

█ 【安卓学习之UI学习】Dialog的使用总结3 - setAdapter和setItems区别


█ 系列文章目录

提示:这里是收集了和Dialog有关的文章

█ 文章目录


█ 读前说明

  • 本文通过学习别人写demo,学习一些课件,参考一些博客,’学习相关知识,如果涉及侵权请告知
  • 本文只简单罗列相关的代码实现过程
  • 涉及到的逻辑以及说明也只是简单介绍,主要当做笔记,了解过程而已    

█ setAdapter使用

  • 效果图
    在这里插入图片描述

  • 布局:android.R.select_dialog_item
    可以看出,通过修改textColorAlertDialogListItem来设置字体颜色
    也可以自定义layout(修改颜色、字体、居中等)

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="?android:attr/textColorAlertDialogListItem"
    android:gravity="center_vertical"
    android:paddingStart="14dip"
    android:paddingEnd="15dip"
    android:ellipsize="marquee"
/>
  • 代码:
 final ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.select_dialog_item);
 adapter.add("数学");
 adapter.add("语文");
 adapter.add("英文");
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("请选择你喜欢的课程")
        .setPositiveButton(android.R.string.cancel, null)// 取消
        .setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
		    @Override
		    public void onClick(DialogInterface dialog, int which) {
		        // which = 0 1 2
		        Toast.makeText(activity, adapter.getItem(which), Toast.LENGTH_SHORT).show();
		    }
		});
builder.create().show();

█ setItems使用

  • 效果图
    在这里插入图片描述

  • 布局:android.R.layout.select_dialog_singlechoice
    可以看出,通过修改textColorAlertDialogListItem来设置字体颜色

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="?android:attr/textColorAlertDialogListItem"
    android:gravity="center_vertical"
    android:paddingStart="12dip"
    android:paddingEnd="7dip"
    android:checkMark="?android:attr/listChoiceIndicatorSingle"
    android:ellipsize="marquee"
/>

  • 代码:
final String[] fileLabels = {"数学","语文","英文","体育"};
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("请选择你喜欢的课程");
builder.setItems(fileLabels, new OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // which = 0 1 2 3
        Toast.makeText(activity, fileLabels[which], Toast.LENGTH_SHORT).show();
        // Snackbar.make(view, fileLabels[which], Snackbar.LENGTH_LONG).setAction("Action", null).show();
    }
});
builder.create().show();

█ setAdapter和setItems区别

  • builder.setAdapter
public class AlertDialog extends Dialog implements DialogInterface {
    private AlertController mAlert;
    public static class Builder {
        private final AlertController.AlertParams P;
        /**
         * Set a list of items, which are supplied by the given {@link ListAdapter}, to be
         * displayed in the dialog as the content, you will be notified of the
         * selected item via the supplied listener.
         * 设置由给定的 {@link ListAdapter} 提供的项目列表,作为内容显示在对话框中,您将通过提供的侦听器收到所选项目的通知。
         * 
         * @param adapter The {@link ListAdapter} to supply the list of items
         * 		 adapter 提供项目列表
         * @param listener The listener that will be called when an item is clicked.
         * 		 listener 单击项目时将调用的侦听器。
         * @return This Builder object to allow for chaining of calls to set methods
         * 		   这个 Builder 对象允许链接调用设置方法
         */
        public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {
            P.mAdapter = adapter;
            P.mOnClickListener = listener;
            return this;
        }
    }
}
  • builder.setItems
public class AlertDialog extends Dialog implements DialogInterface {
    private AlertController mAlert;
    public static class Builder {
        private final AlertController.AlertParams P;
        /**
         * Set a list of items to be displayed in the dialog as the content, you will be notified of the
         * selected item via the supplied listener.
         * 设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。
         * @return This Builder object to allow for chaining of calls to set methods
         * 		   这个 Builder 对象允许链接调用设置方法
         */
        public Builder setItems(CharSequence[] items, final OnClickListener listener) {
            P.mItems = items;
            P.mOnClickListener = listener;
            return this;
        }
    }
}
  • mAdapter 、mItems 使用地方:
  public static class AlertParams {
        public final Context mContext;
        public final LayoutInflater mInflater;
        
        public CharSequence[] mItems;
        public ListAdapter mAdapter;
        public boolean[] mCheckedItems;
        public boolean mIsMultiChoice;
        public boolean mIsSingleChoice;
        public DialogInterface.OnMultiChoiceClickListener mOnCheckboxClickListener;
        public DialogInterface.OnClickListener mOnClickListener;
        
        public void apply(AlertController dialog) {
        	。。。。。。
            // For a list, the client can either supply an array of items or an
            // adapter or a cursor
            if ((mItems != null) || (mCursor != null) || (mAdapter != null)) {
                createListView(dialog);
            }
            。。。。。。
        }
        private void createListView(final AlertController dialog) {
            final RecycleListView listView = (RecycleListView)
                    mInflater.inflate(dialog.mListLayout, null);
            ListAdapter adapter;
            
            if (mIsMultiChoice) {// 多选框
                。。。。。。
            } else {// 单选框 优先使用 mCursor数据,其次使用mAdapter数据,最后再使用mItems
                int layout = mIsSingleChoice 
                        ? dialog.mSingleChoiceItemLayout : dialog.mListItemLayout;
                if (mCursor == null) {
                    adapter = (mAdapter != null) ? mAdapter
                            : new ArrayAdapter<CharSequence>(mContext, layout, R.id.text1, mItems);
                } else {
                    adapter = new SimpleCursorAdapter(mContext, layout, 
                            mCursor, new String[]{mLabelColumn}, new int[]{R.id.text1});
                }
            }
            
            dialog.mAdapter = adapter;
            dialog.mCheckedItem = mCheckedItem;
            
            if (mOnClickListener != null) {
                listView.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView parent, View v, int position, long id) {
                        mOnClickListener.onClick(dialog.mDialogInterface, position);
                        if (!mIsSingleChoice) {// 单选框,直接关闭对话框
                            dialog.mDialogInterface.dismiss();
                        }
                    }
                });
            } else if (mOnCheckboxClickListener != null) {
                listView.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView parent, View v, int position, long id) {
                        if (mCheckedItems != null) {
                            mCheckedItems[position] = listView.isItemChecked(position);
                        }
                        mOnCheckboxClickListener.onClick(
                                dialog.mDialogInterface, position, listView.isItemChecked(position));
                    }
                });
            }
            
            if (mIsSingleChoice) {
                listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            } else if (mIsMultiChoice) {
                listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
            }
            listView.mRecycleOnMeasure = mRecycleOnMeasure;
            dialog.mListView = listView;
        }
    }


█ 其他


█ 相关资料

提示:这里是参考的相关文章

  1. 2013-01-23 android源码浅析–AlertController_傲慢的上校的专栏-CSDN博客

█ 免责声明

博主分享的所有文章内容,部分参考网上教程,引用大神高论,部分亲身实践,记下笔录,内容可能存在诸多不实之处,还望海涵,本内容仅供学习研究使用,切勿用于商业用途,若您是部分内容的作者,不喜欢此内容被分享出来,可联系博主说明相关情况通知删除,感谢您的理解与支持!

转载请注明出处:
https://blog.csdn.net/ljb568838953/article/details/120077358

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值