日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
安卓動態(tài)管理Fragment深入分析:“這幾個組件你知道嗎?”

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

成都創(chuàng)新互聯(lián)專注于樺甸企業(yè)網(wǎng)站建設(shè),響應式網(wǎng)站建設(shè),電子商務商城網(wǎng)站建設(shè)。樺甸網(wǎng)站建設(shè)公司,為樺甸等地區(qū)提供建站服務。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

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

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

二、使用FragmentManager組件

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

 
 
 
 
  1. //1、創(chuàng)建FragmentManager組件
  2. FragmentManager fm=super.getSupportFragmentManager();
  3. //2、查詢方法,獲得Activity中某一個Fragment
  4. fm.findFragmentById(R.id.fooler)
  5. fm.findFragmentByTag(”tagName”)
  6. //3、動態(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代碼應組織在Fragment所屬的Activity中去,下面就通過一個案例來看看具體實現(xiàn).

三、實現(xiàn)案例

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

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

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. }
  10. private void initFragment(){
  11. floor=(FloorFragment)super.getSupportFragmentManager().findFragmentById(R.id.floor);
  12. floor.setOnContentFragmentListener(this);//注冊偵聽,傳入實現(xiàn)類對象
  13. contentFragment=new ContentFragment();
  14. FragmentManager fm=super.getSupportFragmentManager();
  15. fm.beginTransaction().add(R.id.content,contentFragment,"content").commit();
  16. }
  17. public void setFragment(Fragment fragment){
  18. getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit();
  19. }
  20. @Override
  21. public void setContentFragment(String param) {
  22. // TODO Auto-generated method stub
  23. Bundle bundle=new Bundle();
  24. bundle.putString("title", param);
  25. contentFragment=new ContentFragment();
  26. contentFragment.setArguments(bundle);
  27. super.getSupportFragmentManager().beginTransaction()
  28. .replace(R.id.content, contentFragment).commit();
  29. }
  30. }

網(wǎng)頁名稱:安卓動態(tài)管理Fragment深入分析:“這幾個組件你知道嗎?”
標題URL:http://m.5511xx.com/article/dppdooe.html