国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中你可能不知道的Fragment妙用

2019-10-22 18:32:48
字體:
來源:轉載
供稿:網友

本文主要給大家介紹了關于Android中你可能不知道的Fragment妙用的相關內容,分享出來供大家參考學習,下面來一起看看吧。

先來看看效果圖

android,fragment,fragment使用,fragment切換

在軟件開發中登陸功能是十分常見重要的,就以此為例說明android/216284.html">fragment的一種用法,讓開發變得更自如

1.這個用法的原因和意義

  • 在未登錄情況下,點擊很多地方都可能要跳到登陸界面,登陸成功后,當前頁面需要刷新
  • 我們的一般做法是StartActivityForResult,在登陸成功后,SetResultOK,finsh登陸頁面。 在當前Activity或者fragment的OnActivityResult中根據RequestCode和ResultCode來判斷登陸是否成功來刷新界面
  • 由于要登陸的地方很多,重復在不同的Activity或Fragment中重寫OnactivityResult是個很頭痛的事,甚至有時后我們在adapter或者dialog等中要獲取這個登陸的回調是很麻煩的,數據要傳來傳去,用EVenbus也不能簡化我們的操作
  • 有沒有辦法讓我們,像設置OnClickListener這樣直接獲得登陸回調?

2.先看看用法

在任何需要登陸的地方調用我們在Utils中寫的一個靜態方法

一次寫好從此輕松調用

 ActivityUtils.startLogin(this, new ActivityUtils.ActivityResultListner() {  @Override  public void loginsuccess() {  ((Button)v).setText("您已登陸");  }  @Override  public void logincancel() {  Toast.makeText(MainActivity.this,"您已取消登陸",0).show();  } });

3.實現的方式

  • 利用fragment擁有和activity同步的生命周期
  • frament中可以收到OnActivityResult的回調
  • 定義回調接口
//用abstract class我們在不需要cancel回掉時可以不重寫 public abstract static class ActivityResultListner { public void loginsuccess() { } public void logincancel() { } }

2.先定義一個fragment用于處理回調

 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、回調的實現

  2、傳進的Context 要是FragmentActivity的子類

     實際中

     AppcomatActivity Fragment.getActivity()都是滿足這個要求的

  3、先把frament添加到activity

  4、根據fragment的onActivityResult獲取回調

 public static void startLogin(FragmentActivity context, ActivityResultListner listener) { //先看activity是否添加過該fragment, 添加根據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; } //設置監聽 myFragment.setListener(listener); Intent intent = new Intent(context, loginActivity.class); myFragment.startActivityForResult(intent, MyFragment.LOGIN); }

源碼下載:

github:https://github.com/While1true/---Fragment-

4.總結

利用了fragment和activity相同的生命周期,用同樣的方法可以做很多事情,比如申請權限等

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福建省| 如皋市| 竹溪县| 嘉善县| 绥江县| 平泉县| 成武县| 屯留县| 武平县| 皮山县| 湟源县| 贵港市| 天等县| 鹤山市| 永新县| 清河县| 拉萨市| 紫金县| 临邑县| 永年县| 望城县| 温宿县| 紫云| 新郑市| 犍为县| 辽阳县| 彭泽县| 越西县| 兰西县| 彭泽县| 镇平县| 合江县| 晋宁县| 桂林市| 鹤岗市| 大化| 始兴县| 灯塔市| 老河口市| 沛县| 盐亭县|