自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

安卓動(dòng)態(tài)管理Fragment深入分析:“這幾個(gè)組件你知道嗎? ”

移動(dòng)開發(fā) Android
Fragment可以理解為將Activity劃分為若干個(gè)片段,F(xiàn)ragment是Activity的一部分,生命周期是依賴Activity的,是不能單獨(dú)存在的。

一、Fragment與Activity的關(guān)系

要理解動(dòng)態(tài)管理Fragment首先要理解一下Fragment與Activity的關(guān)系

Fragment可以理解為將Activity劃分為若干個(gè)片段,F(xiàn)ragment是Activity的一部分,生命周期是依賴Activity的,是不能單獨(dú)存在的。這樣不難理解所有Fragment的管理(查找、添加、刪除、替換)都應(yīng)該在Fragment所依賴的Activity中進(jìn)行,也就是Activity才是Fragment交互的場(chǎng)所,不要試圖在一個(gè)Fragment中去管理另一個(gè)Fragment雖然也可以實(shí)現(xiàn)要求的功能但是不符合規(guī)范的。要完成對(duì)Fragment的具體操作需要使用FragmentManager組件。

二、使用FragmentManager組件

使用FragmentManager組件的關(guān)鍵代碼如下:

  1. //1、創(chuàng)建FragmentManager組件 
  2. FragmentManager fm=super.getSupportFragmentManager(); 
  3. //2、查詢方法,獲得Activity中某一個(gè)Fragment 
  4. fm.findFragmentById(R.id.fooler) 
  5. fm.findFragmentByTag(”tagName”) 
  6. //3、動(dòng)態(tài)添加Fragment 
  7. fm.beginTransaction().add(R.id.content,contentFragment,"content").commit(); 
  8. //4、替換Fragment 
  9. fm.beginTransaction().replace(R.id.OldFragment, newFragment).commit(); 
  10. //5、刪除Fragment 
  11. fm.beginTransaction().remove(R.id.myFragment).commit(); 
  12. //6、向Fragment傳遞數(shù)據(jù) 
  13. f.setArguments(Bundle )方法傳遞數(shù)據(jù)

     

上述管理Fragment代碼應(yīng)組織在Fragment所屬的Activity中去,下面就通過一個(gè)案例來看看具體實(shí)現(xiàn).

三、實(shí)現(xiàn)案例

首先看一下本次的應(yīng)用案例(如圖所示),當(dāng)單擊底部***個(gè)區(qū)域和第二區(qū)域時(shí)實(shí)現(xiàn)中心區(qū)域的切換

界面分析:有三個(gè)區(qū)域 :頭部區(qū)域TitleFragment,中心區(qū)域是一個(gè)FrameLayout布局通過代碼動(dòng)態(tài)加載ContentFragment,底部區(qū)域FloorFragment

1、Activity的布局如下

  1. RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2. android:layout_width="match_parent" 
  3. android:layout_height="match_parent"
  4. <fragment android:id="@+id/fgTitle" 
  5. android:layout_width="match_parent" 
  6. android:layout_height="45dp" 
  7. android:name="com.jereh.android.course.fragment.TitleFragment" 
  8. /> 
  9. <FrameLayout android:id="@+id/content" 
  10. android:layout_width="match_parent" 
  11. android:layout_height="match_parent" 
  12. android:layout_below="@id/fgTitle" 
  13. /> 
  14. <fragment android:id="@+id/floor" 
  15. android:layout_width="match_parent" 
  16. android:layout_height="wrap_content" 
  17. android:layout_alignParentBottom="true" 
  18. android:orientation="horizontal" 
  19. android:name="com.jereh.android.course.fragment.FloorFragment" 
  20. /> 
  21. </RelativeLayout> 
  22.  
  23. 復(fù)制代碼 
  24. 2、FloorFragment代碼 
  25. 復(fù)制代碼 
  26.  
  27. public class FloorFragment extends Fragment implements OnClickListener { 
  28. @Override 
  29. public void onAttach(Activity activity) { 
  30. super.onAttach(activity); 
  31.  
  32. @Override 
  33. public View onCreateView(LayoutInflater inflater, ViewGroup container, 
  34. Bundle savedInstanceState) { 
  35. // TODO Auto-generated method stub 
  36. View view=inflater.inflate(R.layout.floor_fragment, container,false); 
  37. LinearLayout home=(LinearLayout)view.findViewById(R.id.home); 
  38. LinearLayout list=(LinearLayout)view.findViewById(R.id.list); 
  39. home.setOnClickListener(this); 
  40. list.setOnClickListener(this); 
  41. return view; 
  42. //定義接口,該接口在Activity中去實(shí)現(xiàn),降低Activity與Fragment的耦合度 
  43. public interface OnContentFragmentListener{ 
  44. void setContentFragment(String param); 
  45. private OnContentFragmentListener onContentFragmentListener; 
  46. public void setOnContentFragmentListener( 
  47. OnContentFragmentListener onContentFragmentListener) { 
  48. this.onContentFragmentListener = onContentFragmentListener; 
  49. @Override 
  50. public void onClick(View view) { 
  51. // TODO Auto-generated method stub 
  52. if(onContentFragmentListener!=null){ 
  53. switch(view.getId()){ 
  54. case R.id.home: 
  55. //回調(diào)機(jī)制,調(diào)用實(shí)現(xiàn)類的方法 
  56. onContentFragmentListener.setContentFragment("主面板Fragment"); 
  57. break
  58. case R.id.list: 
  59. onContentFragmentListener.setContentFragment("列表信息"); 
  60. break
3、ContentFragment代碼
  1. public class ContentFragment extends Fragment { 
  2. private String title; 
  3. public void setArguments(Bundle args) { 
  4. title=args.getString("title"); 
  5. @Override 
  6. public View onCreateView(LayoutInflater inflater, ViewGroup container, 
  7. Bundle savedInstanceState) { 
  8. View view=inflater.inflate(R.layout.content_fragment, container,false); 
  9. if(title!=null)((TextView)view.findViewById(R.id.tvContent)).setText(title); 
  10. return view; 
  11. }

     

4、DynaFragmentActivity代碼

  1. public class DynaFragmentActivity extends FragmentActivity implements FloorFragment.OnContentFragmentListener { 
  2. private ContentFragment contentFragment; 
  3. private FloorFragment floor; 
  4. @Override 
  5. protected void onCreate(Bundle savedInstanceState) { 
  6. super.onCreate(savedInstanceState); 
  7. super.setContentView(R.layout.dyna_fragment_activity); 
  8. initFragment(); 
  9. private void initFragment(){ 
  10. floor=(FloorFragment)super.getSupportFragmentManager().findFragmentById(R.id.floor); 
  11. floor.setOnContentFragmentListener(this);//注冊(cè)偵聽,傳入實(shí)現(xiàn)類對(duì)象 
  12. contentFragment=new ContentFragment(); 
  13. FragmentManager fm=super.getSupportFragmentManager(); 
  14. fm.beginTransaction().add(R.id.content,contentFragment,"content").commit(); 
  15.  
  16. public void setFragment(Fragment fragment){ 
  17. getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit(); 
  18.  
  19. @Override 
  20. public void setContentFragment(String param) { 
  21. // TODO Auto-generated method stub 
  22. Bundle bundle=new Bundle(); 
  23. bundle.putString("title", param); 
  24. contentFragment=new ContentFragment(); 
  25. contentFragment.setArguments(bundle); 
  26. super.getSupportFragmentManager().beginTransaction() 
  27. .replace(R.id.content, contentFragment).commit(); 
  28.  
責(zé)任編輯:chenqingxiang 來源: 杰瑞教育
相關(guān)推薦

2021-10-14 06:52:47

算法校驗(yàn)碼結(jié)構(gòu)

2021-02-20 08:21:18

Hive動(dòng)態(tài)分區(qū)

2009-06-10 18:12:38

Equinox動(dòng)態(tài)化OSGi動(dòng)態(tài)化

2022-09-20 14:11:37

JVM調(diào)優(yōu)命令

2024-07-01 08:40:18

tokio派生線程

2020-09-07 19:38:12

安卓手機(jī)Android

2021-06-11 13:59:22

CSS原子類

2023-07-26 00:16:49

2013-11-14 17:02:41

Android多窗口

2024-04-07 00:00:00

ESlint命令變量

2024-05-28 09:12:10

2023-12-12 08:41:01

2023-12-20 08:23:53

NIO組件非阻塞

2024-04-30 09:02:48

2023-04-26 10:21:04

2015-01-13 11:17:17

2024-11-14 10:44:57

2020-07-07 12:30:16

Windows 10Windows操作系統(tǒng)

2021-03-26 11:00:50

SpringMVC組件接口

2022-11-04 14:16:05

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)