Android中你可能不知道的Fragment妙用
本文主要給大家介紹了關(guān)于Android中你可能不知道的Fragment妙用的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來一起看看吧。
先來看看效果圖
在軟件開發(fā)中登陸功能是十分常見重要的,就以此為例說明fragment的一種用法,讓開發(fā)變得更自如
1.這個(gè)用法的原因和意義
- 在未登錄情況下,點(diǎn)擊很多地方都可能要跳到登陸界面,登陸成功后,當(dāng)前頁面需要刷新
- 我們的一般做法是StartActivityForResult,在登陸成功后,SetResultOK,finsh登陸頁面。 在當(dāng)前Activity或者fragment的OnActivityResult中根據(jù)RequestCode和ResultCode來判斷登陸是否成功來刷新界面
- 由于要登陸的地方很多,重復(fù)在不同的Activity或Fragment中重寫OnactivityResult是個(gè)很頭痛的事,甚至有時(shí)后我們?cè)赼dapter或者dialog等中要獲取這個(gè)登陸的回調(diào)是很麻煩的,數(shù)據(jù)要傳來傳去,用EVenbus也不能簡化我們的操作
- 有沒有辦法讓我們,像設(shè)置OnClickListener這樣直接獲得登陸回調(diào)?
2.先看看用法
在任何需要登陸的地方調(diào)用我們?cè)赨tils中寫的一個(gè)靜態(tài)方法
一次寫好從此輕松調(diào)用
ActivityUtils.startLogin(this, new ActivityUtils.ActivityResultListner() { @Override public void loginsuccess() { ((Button)v).setText("您已登陸"); } @Override public void logincancel() { Toast.makeText(MainActivity.this,"您已取消登陸",0).show(); } });
3.實(shí)現(xiàn)的方式
- 利用fragment擁有和activity同步的生命周期
- frament中可以收到OnActivityResult的回調(diào)
- 定義回調(diào)接口
//用abstract class我們?cè)诓恍枰猚ancel回掉時(shí)可以不重寫 public abstract static class ActivityResultListner { public void loginsuccess() { } public void logincancel() { } }
2.先定義一個(gè)fragment用于處理回調(diào)
public static class MyFragment extends Fragment { public static final int LOGIN = 123; ActivityResultListner listener; public void setListener(ActivityResultListner listener) { this.listener = listener; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == LOGIN) { if (resultCode == RESULT_OK) { if (listener != null) listener.loginsuccess(); } else { if (listener != null) listener.logincancel(); } } }
1、回調(diào)的實(shí)現(xiàn)
2、傳進(jìn)的Context 要是FragmentActivity的子類
實(shí)際中
AppcomatActivity Fragment.getActivity()
都是滿足這個(gè)要求的
3、先把frament添加到activity
4、根據(jù)fragment的onActivityResult獲取回調(diào)
public static void startLogin(FragmentActivity context, ActivityResultListner listener) { //先看activity是否添加過該fragment, 添加根據(jù)Tag找出 ,沒有就添加 FragmentManager manager = context.getSupportFragmentManager(); MyFragment myFragment = null; Fragment loginf = manager.findFragmentByTag(MyFragment.LOGIN + ""); if (loginf == null) { myFragment = new MyFragment(); manager.beginTransaction().add(myFragment, MyFragment.LOGIN + "").commit(); //這句是讓commit立即生效,不然運(yùn)行會(huì)報(bào)錯(cuò),fragment還沒有被attach manager.executePendingTransactions(); } else { myFragment = (MyFragment) loginf; } //設(shè)置監(jiān)聽 myFragment.setListener(listener); Intent intent = new Intent(context, loginActivity.class); myFragment.startActivityForResult(intent, MyFragment.LOGIN); }
源碼下載:
github:https://github.com/While1true/---Fragment-
本地下載:http://xiazai.jb51.net/201707/yuanma/Fragment--master(jb51.net).rar
4.總結(jié)
利用了fragment和activity相同的生命周期,用同樣的方法可以做很多事情,比如申請(qǐng)權(quán)限等
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Android基礎(chǔ)之使用Fragment控制切換多個(gè)頁面
- Android基礎(chǔ)之Fragment與Activity交互詳解
- Android中fragment嵌套fragment問題解決方法
- Android Fragment 基本了解(圖文介紹)
- Android 管理Activity中的fragments
- Android程序開發(fā)之Fragment實(shí)現(xiàn)底部導(dǎo)航欄實(shí)例代碼
- Android的Fragment的生命周期各狀態(tài)和回調(diào)函數(shù)使用
- android開發(fā)教程之實(shí)現(xiàn)滑動(dòng)關(guān)閉fragment示例
相關(guān)文章
android 自定義ScrollView實(shí)現(xiàn)背景圖片伸縮的實(shí)現(xiàn)代碼及思路
本文純屬個(gè)人見解,是對(duì)前面學(xué)習(xí)的總結(jié),如有描述不正確的地方還請(qǐng)高手指正~,首先還是按照通例給大家看下示例.2013-05-05android自動(dòng)工具類TextUtils使用詳解
這篇文章主要介紹了android自動(dòng)工具類TextUtils的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Android之使用Android-query框架開發(fā)實(shí)戰(zhàn)(二)
這篇文章主要介紹了Android之使用Android-query框架開發(fā)實(shí)戰(zhàn)(二)的相關(guān)資料,需要的朋友可以參考下2015-10-10AndroidStudio kotlin配置詳細(xì)介紹
這篇文章主要介紹了AndroidStudio kotlin配置詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-05-05Android 開機(jī)直接運(yùn)行app并當(dāng)做手機(jī)桌面的實(shí)例
今天小編就為大家分享一篇Android 開機(jī)直接運(yùn)行app并當(dāng)做手機(jī)桌面的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08Android實(shí)現(xiàn)手電筒電源鍵關(guān)閉功能
這篇文章主要介紹了Android實(shí)現(xiàn)手電筒電源鍵關(guān)閉功能,在打開手電筒之后,機(jī)器休眠,客戶要求點(diǎn)擊電源鍵,手電筒需要關(guān)閉,下面小編給大家分享實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-11-11微信支付僅能成功調(diào)用一次問題的解決方法(Android)
這篇文章主要介紹了微信支付僅能成功調(diào)用一次問題的解決方法,感興趣的小伙伴們可以參考一下2016-08-08