Android中你可能不知道的Fragment妙用
本文主要給大家介紹了關(guān)于Android中你可能不知道的Fragment妙用的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來一起看看吧。
先來看看效果圖
在軟件開發(fā)中登陸功能是十分常見重要的,就以此為例說明fragment的一種用法,讓開發(fā)變得更自如
1.這個用法的原因和意義
- 在未登錄情況下,點擊很多地方都可能要跳到登陸界面,登陸成功后,當(dāng)前頁面需要刷新
- 我們的一般做法是StartActivityForResult,在登陸成功后,SetResultOK,finsh登陸頁面。 在當(dāng)前Activity或者fragment的OnActivityResult中根據(jù)RequestCode和ResultCode來判斷登陸是否成功來刷新界面
- 由于要登陸的地方很多,重復(fù)在不同的Activity或Fragment中重寫OnactivityResult是個很頭痛的事,甚至有時后我們在adapter或者dialog等中要獲取這個登陸的回調(diào)是很麻煩的,數(shù)據(jù)要傳來傳去,用EVenbus也不能簡化我們的操作
- 有沒有辦法讓我們,像設(shè)置OnClickListener這樣直接獲得登陸回調(diào)?
2.先看看用法
在任何需要登陸的地方調(diào)用我們在Utils中寫的一個靜態(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.實現(xiàn)的方式
- 利用fragment擁有和activity同步的生命周期
- frament中可以收到OnActivityResult的回調(diào)
- 定義回調(diào)接口
//用abstract class我們在不需要cancel回掉時可以不重寫 public abstract static class ActivityResultListner { public void loginsuccess() { } public void logincancel() { } }
2.先定義一個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)的實現(xiàn)
2、傳進(jìn)的Context 要是FragmentActivity的子類
實際中
AppcomatActivity Fragment.getActivity()
都是滿足這個要求的
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立即生效,不然運行會報錯,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相同的生命周期,用同樣的方法可以做很多事情,比如申請權(quán)限等
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
android 自定義ScrollView實現(xiàn)背景圖片伸縮的實現(xiàn)代碼及思路
本文純屬個人見解,是對前面學(xué)習(xí)的總結(jié),如有描述不正確的地方還請高手指正~,首先還是按照通例給大家看下示例.2013-05-05Android之使用Android-query框架開發(fā)實戰(zhàn)(二)
這篇文章主要介紹了Android之使用Android-query框架開發(fā)實戰(zhàn)(二)的相關(guān)資料,需要的朋友可以參考下2015-10-10AndroidStudio kotlin配置詳細(xì)介紹
這篇文章主要介紹了AndroidStudio kotlin配置詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-05-05Android 開機(jī)直接運行app并當(dāng)做手機(jī)桌面的實例
今天小編就為大家分享一篇Android 開機(jī)直接運行app并當(dāng)做手機(jī)桌面的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08Android實現(xiàn)手電筒電源鍵關(guān)閉功能
這篇文章主要介紹了Android實現(xiàn)手電筒電源鍵關(guān)閉功能,在打開手電筒之后,機(jī)器休眠,客戶要求點擊電源鍵,手電筒需要關(guān)閉,下面小編給大家分享實現(xiàn)代碼,需要的朋友可以參考下2017-11-11微信支付僅能成功調(diào)用一次問題的解決方法(Android)
這篇文章主要介紹了微信支付僅能成功調(diào)用一次問題的解決方法,感興趣的小伙伴們可以參考一下2016-08-08