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中的css特性,浅谈HTML5 CSS3的新交互特性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

检查各计算机所属工作组ip,如何在Win8.1/RT 8.1中添加语言或键盘

通过添加语言,你可以更改用于在 Windows、应用和 Web 中读取和写入的语言。添加语言若要更改你的 Windows 显示语言或者添加键盘以进行键入,首先要将一种语言添加到语言列表中。从屏幕右边缘向中间轻扫,点击“设置”,然后点击“更…

计算机机器人方向,计算机考研想学习智能机器人方向都有那几个学校呢..._考研_帮考网...

caowengqin新兵答主12-11TA获得超过868个赞智能科学与技术专业考研方向1:计算机技术计算机技术是(专业硕士)工程下的二级学科专业。计算机技术领域重点研究得是如何扩展计算机系统的功能和发挥计算机系统在各学科、各类工程、人类生活和工作中的作用。计算机技术是信…

css3 flex 省略号,flex 布局下 CSS 文本超出单行宽度后显示省略号

布局两栏布局,左边定宽,右边 flex-grow: 1,自动填满剩余空间。image.png{{book.name}}{{book.author}}给 book-info 设置width: 0如果不设置宽度, .book-info 可以被子节点无限撑开;因此 .name 总有足够的宽…

karaf内嵌文件服务器,关于OSGI(Karaf) Classloader的几点说明

1. Java ClassLoaderJava通过Classloader加载Class,Classloader之间相互隔离。隔离真正的意思是:不同的Classloader可以加载相同的class定义,并且被jvm认定为不同的class。很多人对隔离有误解,认为不同的Classloader之间不能相互访…

eclipse debug(程序调试)单步执行 简述

eclipse debug(程序调试)单步执行 简述 1.在需要程序停止的地方 双击打一个断点 2.右键以debug模式执行(有个虫子标志的选项) 3.单步执行 观察变量的变化 如图所示: debug常见问题: 1.Variables(变量区…

微信小程序~如何设置页面的背景色

微信小程序~如何设置页面的背景色 众所周知,微信小程序每个页面由.json,.scss,.ts,.wxml这四个文件组成。 有的小伙伴会发现,需要给页面加背景色的时候,只需在此页面的.scss文件中写个page{background-colo…

Java JDK 自带排序(Arrays.sort(数组名))与自行编写的降序

JDK 自带排序(Arrays.sort(数组名))与自行编写的降序 jdk 自带的排序 Arrays.sort(数组名) 只能进行升序排列 可以与自己写的降序 配合使用 import java.util.Arrays;public class Test1 {//jdk 自带升序public static void m1(int [] arr1) {Arrays.sor…

javaee 中遇到的jdk自带的异常(Exception)

javaee 中遇到的异常(Exception) 如果输入了类型不匹配的数据,则会报InputMismathException(输入不匹配异常) 如果访问超过数组范围的下标将会报数组下标越界异常:ArrayIndexOutOfBoundsException ( 数组越界异常) 在多态的向下转…