android 基类fragment,Android DialogFragment 基类的定制

鸿洋博客介绍:DialogFragment的基本使用

好处:

1:使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的生命周期

2.DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同的效果)

使用方法:

Dialoger.build(getActivity())

.setContentText("你好防盗链发交电费")

.setContentTitle("标题")

.setNegativeBtn("重新认证", new Dialoger.OnNegativeListener() {

@Override public void onNegative(Dialog dialog) {

dialog.dismiss();

....

....

} })

.setPositiveBtn("确认", new Dialoger.OnPositiveListener() {

@Override public void onPositive(Dialog dialog) {

dialog.dismiss();

....//对应的操作

....

}

})

.dialoger.setOnCancelListener(new DialogInterface.OnCancelListener() {

@Override

public void onCancel(DialogInterface dialog) {

view.getViewActivity().finish();

}

}). show();

封装:既然DialogFragment比普通的dialog好这么多,岂有不封装哪来用的道理

使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。onCreateView即使用定义的xml布局文件展示Dialog。onCreateDialog即利用AlertDialog或者Dialog创建出Dialog。下面的封装采用onCreateView的方式来封装

1.构建dialog 设置基本参数

public static Dialoger build(FragmentActivity activity, String transactionTag, Bundle args) {

Dialoger dialoger = new Dialoger();

dialoger.setActivity(activity);//设置传入的activity对象

dialoger.setTransactionTag(transactionTag);//设置的tag标志(和Fragment一样,便于利用tag获取当前的Activity对象,来传递数据)

dialoger.setArguments(args);//设置的bundle参数

dialoger.setCancelable(false);//初始化设置为不可点击

dialoger.setTheme(0);//设置没有主题

dialoger.setContentView(R.layout.dialog_default);//设置默认的dialog的View

return dialoger;

}

public static Dialoger build(FragmentActivity activity) {

return build(activity, Dialoger.class.getSimpleName(), null);

}

2.外界传入对应的参数 (标题,context 内容 定义的View)

private void setActivity(FragmentActivity mActivity) {

this.mActivity = mActivity;

}

private void setTransactionTag(String transactionTag) {

this.mTransactionTag = transactionTag;

}

public Dialoger setContentView(int layoutResID) {

this.mContentView = LayoutInflater.from(mActivity).inflate(layoutResID, null);

return this;

}

public Dialoger setContentView(View view) {

this.mContentView = view;

return this;

}

public Dialoger setTheme(int theme) {

setStyle(DialogFragment.STYLE_NO_TITLE, theme);

return this;

}

public Dialoger setContentTitle(String title) {

mContentTitle = title;

return this;

}

public Dialoger setContentText(String text) {

mContentText = text;

return this;

}

public Dialoger setContentTitle(String title, int titleColor) {

mContentTitle = title;

mContentTitleColor = titleColor;

return this;

}

public Dialoger setContentText(String text, int textColor) {

mContentText = text;

mContentTextColor = textColor;

return this;

}

3.对传入进来的参数进行配置

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//设置透明背景

return mContentView;

}

@Override

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {

if (mCancelListener != null) {//只有当设置了取消监听的时候,才可以设置取消

setCancelable(true);

}

//设置标题

TextView mTitleView = (TextView) view.findViewById(R.id.dialog_title_tv);

if (!TextUtils.isEmpty(mContentTitle)) {

mTitleView.setText(mContentTitle);

if (mContentTitleColor != 0) {

mTitleView.setTextColor(mContentTitleColor);

}

} else {

mTitleView.setVisibility(View.GONE);

}

//设置内容

TextView mTextView = (TextView) view.findViewById(R.id.dialog_text_tv);

if (!TextUtils.isEmpty(mContentText)) {

mTextView.setText(mContentText);

if (mContentTextColor != 0) {

mTextView.setTextColor(mContentTextColor);

}

} else {

mTextView.setVisibility(View.GONE);

}

//设置 确定 和 取消 按钮

View buttonPanel = view.findViewById(R.id.buttons_layout);

buttonPanel.setVisibility(View.GONE);

boolean negativeEnable = false;

boolean positiveEnable = false;

//如果有确定按钮 设置 ----->可点击 内容 监听

Button negativeButton = (Button) view.findViewById(R.id.btn_negative);

if (TextUtils.isEmpty(mNegativeText)) {

negativeButton.setVisibility(View.GONE);

} else {

negativeEnable = true;

buttonPanel.setVisibility(View.VISIBLE);

negativeButton.setVisibility(View.VISIBLE);

negativeButton.setText(mNegativeText);

negativeButton.setOnClickListener(this);

if (mNegativeTextColor != 0) {

negativeButton.setTextColor(mNegativeTextColor);

}

}

//如果有取消按钮 设置 ----->可点击 内容 监听

Button positiveButton = (Button) view.findViewById(R.id.btn_positive);

if (TextUtils.isEmpty(mPositiveText)) {

positiveButton.setVisibility(View.GONE);

} else {

positiveEnable = true;

buttonPanel.setVisibility(View.VISIBLE);

positiveButton.setVisibility(View.VISIBLE);

positiveButton.setText(mPositiveText);

positiveButton.setOnClickListener(this);

if (mPositiveTextColor != 0) {

positiveButton.setTextColor(mPositiveTextColor);

}

}

View contentDivider = view.findViewById(R.id.horizontal_divider);

View buttonDivider = view.findViewById(R.id.vertical_divider);

//设置布局的分割线 显示和隐藏

if (positiveEnable) {

if (negativeEnable) {

contentDivider.setVisibility(View.VISIBLE);

buttonDivider.setVisibility(View.VISIBLE);

} else {

contentDivider.setVisibility(View.GONE);

buttonDivider.setVisibility(View.GONE);

}

buttonPanel.setVisibility(View.VISIBLE);

} else {

if (negativeEnable) {

contentDivider.setVisibility(View.VISIBLE);

buttonPanel.setVisibility(View.VISIBLE);

buttonDivider.setVisibility(View.GONE);

} else {

contentDivider.setVisibility(View.GONE);

}

}

}

4.设置确定 取消按钮 和 取消监听

/**

* 确认

*

* @param text

* @param listener

* @return

*/

public Dialoger setPositiveBtn(String text, OnPositiveListener listener) {

mPositiveText = text;

mPositiveListener = listener;

return this;

}

public Dialoger setPositiveColor(int textColor) {

mPositiveTextColor = textColor;

return this;

}

/**

* 取消按钮(不是点击dialog其他地方的取消)

*

* @param text

* @param listener

* @return

*/

public Dialoger setNegativeBtn(String text, OnNegativeListener listener) {

mNegativeText = text;

mNegativeListener = listener;

return this;

}

public Dialoger setNegativeColor(int textColor) {

mNegativeTextColor = textColor;

return this;

}

//取消监听

public void setOnCancelListener(@Nullable DialogInterface.OnCancelListener listener) {

if (listener != null) {

mCancelListener = listener;

}

}

//调用dialog的取消

@Override

public void onCancel(DialogInterface dialog) {

super.onCancel(dialog);

if (mCancelListener != null) {

mCancelListener.onCancel(dialog);

}

}

5.传递 确认 取消 的点击事件来回调 第4条的监听

@Override

public void onClick(View v) {

if (v.getId() == R.id.btn_negative) {

if (mNegativeListener != null) mNegativeListener.onNegative(getDialog());

} else if (v.getId() == R.id.btn_positive) {

if (mPositiveListener != null) mPositiveListener.onPositive(getDialog());

}

}

6.xml布局

style="@style/DT_DIALOG_THEME"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_margin="30dip"

android:background="@drawable/dialog_bg_color"

android:minWidth="270dp"

android:orientation="vertical">

android:id="@+id/dialog_title_tv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginTop="20dp"

android:gravity="center_horizontal"

android:text="提示"

android:textColor="#333333"

android:textSize="18sp"/>

android:id="@+id/dialog_text_tv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="20dp"

android:layout_marginTop="30dp"

android:gravity="center"

android:paddingLeft="20dp"

android:paddingRight="20dp"

android:text="提示"

android:textColor="#686871"

android:textSize="16sp"/>

android:id="@+id/horizontal_divider"

style="@style/horizontal_divider"/>

android:id="@+id/buttons_layout"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/btn_negative"

android:layout_width="0dip"

android:layout_height="44dip"

android:layout_weight="1"

android:background="@android:color/transparent"

android:gravity="center"

android:paddingTop="2dip"

android:text="取消"

android:textColor="#8e8e9c"

android:textSize="17sp"/>

android:id="@+id/vertical_divider"

style="@style/vertical_divider"/>

android:id="@+id/btn_positive"

android:layout_width="0dip"

android:layout_height="44dip"

android:layout_weight="1"

android:background="@android:color/transparent"

android:gravity="center"

android:paddingTop="2dip"

android:text="确定"

android:textColor="#f73e3e"

android:textSize="16sp"/>

7.xml布局简单效果

5acd4722166d

Paste_Image.png

再来回顾下使用方法:采用的建造者模式

Dialoger.build(getActivity())

.setContentText("你好防盗链发交电费")

.setContentTitle("标题")

.setNegativeBtn("重新认证", new Dialoger.OnNegativeListener() {

@Override public void onNegative(Dialog dialog) {

dialog.dismiss();

....

....

} })

.setPositiveBtn("确认", new Dialoger.OnPositiveListener() {

@Override public void onPositive(Dialog dialog) {

dialog.dismiss();

....//对应的操作

....

}

})

.dialoger.setOnCancelListener(new DialogInterface.OnCancelListener() {

@Override

public void onCancel(DialogInterface dialog) {

view.getViewActivity().finish();

}

}). show();

over~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

升级鸿蒙系统无法选择应用,申请鸿蒙系统有一个应用选择怎么选择呢

[分享交流]申请鸿蒙系统有一个应用选择怎么选择呢34364电梯直达huafen774590890新学乍练发表于 2020-12-18 22:19:17来自:HUAWEI Mate 30 Pro 5G最新回复 2020-12-19 09:31:55要怎么选择大家知道吗?想着你的狼自成一派发表于 2020-12-18 22:22:29来自&am…

html5 网页游戏论文,JavaScript编写的网页小游戏,很给力

以下为游戏代码:var timerID null;var INT 40;var loadFLG 0;var gameFLG 0;var missFLG 0;var tim 0;var blcol new Array(5); // block colorvar blsta new Array(40); // block statusvar blNO new Array(40); // block Novar blclr 0; // clear block…

c 插件读取有属性的html6,廖雪峰的JS教程6-jQuery

jQueryjQuery是JavaScript世界中使用最广泛的一个库。jQuery这么流行,肯定是因为它解决了一些很重要的问题。实际上,jQuery能帮我们干这些事情:消除浏览器差异:你不需要自己写冗长的代码来针对不同的浏览器来绑定事件,…

html5中的css特性,浅谈HTML5 CSS3的新交互特性

本文标题的这副图片,是用phosotshop制作的。但是,在搜索引擎中你却无法搜索到它,搜索引擎还没有强大到能够识别图片里面的文字。并且由于图片的体积不算太小,可能网速慢的网友在浏览的时候不得不耐心的等待图片的刷新。那么&#…

html表格通过邮件发送,通过html表格发电子邮件

[email protected]>Create this tableThe field "what" is for different categoriesCREATE TABLE email_notify (ID int(11) DEFAULT ‘0‘ NOT NULL,What varchar(60) DEFAULT ‘0‘ NOT NULL,Name varchar(60) DEFAULT ‘0‘ NOT NULL,Email varchar(60) DEFAU…

计算机专业知识多选题证监会,2019年国家公务员考试中国证监会(计算机类)专业科目考试大纲...

2019年国家公务员考试中国证监会(计算机类)专业科目考试大纲由国家公务员考试网公告解读栏目由提供,更多关于2019国家公务员考试大纲,计算机类国考考试大纲,证监会国考考试大,国家公务员考试公告解读的内容,请关注国家公务员考试网/广东公务员考试网&…

计算机和网络老是断开,电脑插上网线还是显示断开连接怎么办

在网络故障处理中遇到过千奇百怪的问题,这里就说一个比较怪异的问题。一个网线插口,有的电脑插上网线可以正常上网,而有的电脑插上就显示断开连接。试了好多办法,换了网线,换了插口,换了路由器,…

计量经济学第六版计算机答案,伍德里奇计量经济学导论计算机习题第六章第13题c_6.13...

伍德里奇计量经济学导论计算机习题第六章第13题,答案和MATLAB代码clear,clc;% c6.13 by% 打开文字文件和数据文件importdata(meap00_01.des);dataxlsread(meap00_01);% 检验所用数据是否为非空Isnanisnan(data(:,[3,5,8,9]));asum(Isnan);bfind(a0);data1data(b,:);% 变量命名m…

思品课如何使用计算机教学课件,小学思品获奖论文巧用多媒体,优化思品课堂教学...

小学思品获奖论文巧用多媒体,优化思品课堂教学摘要:信息技术辅助课堂教学,有利于促进思想品德课教学内容呈现方式、教师教学方式、学生学习方式和师生互动方式的变革。利用信息技术能提高学生学习思想品德的兴趣;有利于培养学生的…

计算机网络的资源共享功能包,计算机网络的资源共享功能包括

资源共享是现代计算机网络的最主要的作用,它包括软件共享、硬件共享及数据共享。在网络中,多台计算机或同一计算机中的多个用户,同时使用硬件和软件资源。通常多用户同时需要的资源总是超过系统实际物理资源的数量,但采用逻辑(或虚…

《计算机应用基础》期末试卷.,《计算机应用基础》期末试卷(A卷)《计算机应用基础》期末试卷(A卷).doc...

广东外语艺术职业学院成人高等教育2012学年第 一 学期 三年 制2012级 初等教育专业计算机应用基础课程 期末 考试试题试卷类型:A 考试形式:闭卷本试题共 五 大题, 4 页,满分 100 分,考试时间为 120 分钟,答…

计算机学院嘉年华标题,“芯动盛夏 AI创南航” 计算机学院举办第八届计算机嘉年华...

当前,我们正迎来一个科技主导的全智能时代,为激发大家学习探索人工智能的兴趣,切身感受AI科技的魅力所在,计算机科学与技术学院/人工智能学院于6月20日在体育馆广场举办了“芯动盛夏 AI创南航”第八届计算机嘉年华活动。活动中&am…

计算机网络与通信02339,4月全国高等教育自学考试计算机网络与通信试题及答案解析.docx...

4月全国高等教育自学考试计算机网络与通信试题及答案解析.docx精品自学考试资料推荐全国 2018 年 4 月高等教育自学考试计算机网络与通信试题课程代码 02339一、单项选择题本大题共 15 小题,每小题1 分,共 15 分 在每小题列出的四个备选项中只有一个是符…

计算机考研百天,2015考研计算机专业复习百天周计划

计算机百天冲刺周计划学习目标篇百天计划第一周(9月26日—10月6日)1.完成数据结构中线性表的复习;并配以习题巩固练习。2.完成强化课程数据结构第一章的学习,重难点针对复习。3.完成数据结构中栈,队列和数组的复习; 并配以习题巩固练习。4.完成强化课程数…

爱尔兰都柏林圣三一大学计算机排名,2021年爱尔兰都柏林圣三一大学世界及专业排名 不愧是最古老的学府!...

它是参照牛津和剑桥大学模式兴建的欧索世界顶级研究型大学,其商学院也是欧洲培养企业家最多的商学院之一,这所名校就是爱尔兰都柏林圣三一大学,该校的科研实力雄厚,因此,每年都会吸引一大批的学子前往该校留学&#xf…

计算机系统的四种启动方式是,电脑启动方式有几种你知道吗?

关于电脑启动方式有几种,可能你会说,电脑启动不就是按电源按钮启动吗?实际上,电脑有三种启动方式,而且三种启动方式会对应不一样情况,虽然有些概念对现在的电脑略微有一点点落后,但是对于玩电脑…

安装杀毒软件是保障计算机安全,安装杀毒软件是保障计算机安全的唯一措施

摘要:脉搏8次/分,安装安全合的最适此时方式手术是,血压病人术时。软件综合征在最常见的青春前期表现临床是。障计糖病粘多目前据是确诊的依。...脉搏8次/分,安装安全合的最适此时方式手术是,血压病人术时。杀毒保算机施…

畅想未来计算机的绘画作品小学生,畅想未来儿童画绘画作品大全

畅想未来儿童画绘画作品大全导语:未来的科技在不断发展,未来的世界每天充满了新奇。下面是小编为您整理的儿童画,希望对您有所帮助。未来的世界是个先进的地方。我们的交通工具不再是飞机、轮船和汽车,而是宇宙飞船。家里的设备是…

计算机考在职研究生有必要吗,读在职研究生有必要辞掉工作吗?

很多在职场打拼多年的人员,为了以后能有更好的发展,决定读读在职研究生有必要辞掉工作吗?读在职研究生有必要辞掉工作吗?对此,相关老师指出,读在职研究生没必要辞掉工作,在职人员可以边工作边学习,利用休…

计算机word图标不显示,word图标不显示怎么办 设置图标显示的具体方法

word是我们常用的办公软件,有时在使用时,图标会莫名其妙不显示,那么word图标不显示怎么办?下面小编带来设置显示word图标的方法,希望对大家有所帮助。设置显示word图标的方法:按键盘上的Windows徽标健R键&a…