█ 【安卓学习之UI学习】Dialog的使用总结3 - setAdapter和setItems区别
█ 系列文章目录
提示:这里是收集了和Dialog有关的文章
- 【android学习开源项目之BasePopup】BasePopup(PopupWindow)进行二次封装
- 【android学习开源项目之AndroidAutoSize】AndroidAutoSize和DialogFragment的适配
- 【安卓学习之UI学习】 自定义组合控件View 的开发
- 【安卓学习之UI学习】 自定义 弧形等级进度条
- 【安卓学习之UI学习】RecyclerView的使用总结
- 【安卓学习之UI学习】TabLayout的使用总结
- 【安卓学习之UI学习】Dialog的使用总结
- 【安卓学习之UI学习】Dialog的使用总结2 - DialogFragment
- 【安卓学习之UI学习】Dialog的使用总结3 - setAdapter和setItems区别
█ 文章目录
█ 读前说明
- 本文通过学习别人写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;
}
}
█ 其他
█ 相关资料
提示:这里是参考的相关文章
█ 免责声明
博主分享的所有文章内容,部分参考网上教程,引用大神高论,部分亲身实践,记下笔录,内容可能存在诸多不实之处,还望海涵,本内容仅供学习研究使用,切勿用于商业用途,若您是部分内容的作者,不喜欢此内容被分享出来,可联系博主说明相关情况通知删除,感谢您的理解与支持! |
---|
转载请注明出处:
https://blog.csdn.net/ljb568838953/article/details/120077358