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.pswp.cn/news/529320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529320.shtml
英文地址,請注明出處:http://en.pswp.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…