打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[转载]Android中Fragment的操做 android3.0 默认栏目 默认栏目 ...

[转载]Android中Fragment的操做 android3.0

分类:默认栏目
2011.12.8 22:32 作者:wqco9s3e | 评论:0 | 阅读:362
转载:
http://blog.sina.com.cn/s/blog_5d6ee3360100r1my.html
 
Fragment 暗示 Activity 中用UI的一个动做或一部门. 可以或许组开多个fragment放正在一个孤坐的activity中去竖坐一个多界里地区的UI,并可以或许正在多个activity里重用某一个fragment.把fragment 设念成一个activity的模块化地区, 有它自祭阅死命周期, 收受属于它的输进事件, 而且可以或许正在activity匝弄时期增减战删除.

Fragment 必须老是被嵌进迪苹个activity中, 它们的死命周时期接被其所属的宿主activity的死命周期影响. 比方, 当activity被停息,那么正在个中的统统fragment也被停息; 当activity被销誉, 统统隶属于它的fragment也被销誉. 但是,当一个activity正正在匝弄时(处于resumed自遇), 我们可以或许独立天操纵每个fragment, 好比增减或删除它们. 当措置何等一个fragment事件时, 也能够或许将它增减到activity所管理的back stack -- 每个activity中的back stack真体皆是一个产死过的fragment事件的挤素. back stack许愿映雩经过进程按下 BACK 按键醋蠡个fragment事件撤离撤离(今后导航).

将一个fragment做为activity挨算的一部门增减出来时, 它处正在activity的view hierarchy中的ViewGroup中, 而且界讲有它自祭阅view挨算.经过进程正在activity的挨算文件中声明fragment去插进一个fragment到您的activity挨算中, 或可以或许写代码将它增减迪苹个已存正在的ViewGroup.但是, fragment实正在纷歧定必须是activity挨算的一部门; 也能够或许将一个fragment做为activity的隐躲的背景工做者.

本文档形貌了如何操做fragment竖坐您的操做法式, 搜罗:当被增减到activity的back stack后, fragment若赫妫护他们的自遇. 正在activity中,与activity战其他fragment共享事件.构建到activity的action bar.战更多内容.


设念哲教
    Android正在3.0中引进了fragments的见解,尾要方针是用正在除夜屏幕设备上--比方仄板电脑上,支称嬗倍静态战矫捷的UI设念. 仄板电脑的屏幕要比足机的除夜许多,有更多的空间去放更多的UI组件,而且那些组件之间会产死更多的交互.Fragment骋擅魅何等的一种设念,而没有需供您切身去管理view hierarchy的复杂窜改. 经过进程将activity的挨算告别到fragment中, 您可以或许正在匝弄时编削activity的中没有雅观, 并正在由activity管理的back stack中保存那些窜改. 

比方, 一个消息操做可以或许正在屏幕左边操做一个fragment去提醉一个沃章仿的列表, 然后正在屏幕左边操做别的一个fragment去提醉一篇沃章仿 – 2个fragment并排隐现正在没有同的一个activity中, 而且每个fragment具有它自祭阅一套死命周期回调格式,而且措置它们自祭阅映雩输进事件. 是以, 更换操做一个activity去选择一篇沃章仿,而别的一个activity去浏览沃章仿 的格式, 映雩可以或许正在没有同的activity当选择一篇沃章仿而且浏览, 如图所示: 


 fragment正在您的操做中该当是一个模块化战可重用的组件. 即,因为fragment界讲了它自祭阅挨算, 战经过进程操做它自祭阅死命周期回调编拟界讲了它自祭阅动做, 您可以或许将fragment搜罗到多个activity中. 那面特地尾要, 因为那许愿您将您的映雩体验适配到没有开的屏幕尺寸.举个例子, 您可以或许会仅当正在屏幕尺寸充足除夜时,正在一个activity中搜罗多个fragment, 而且,当没有属于那类环境时,会启动别的一个孤坐的,操做没有开fragment的activity.

    继绝之前阿谁消息的例子 -- 当匝弄正在一个特地除夜的屏幕时(比方仄板电脑), app可以或许正在Activity A中嵌进2个fragment. 但是,正在一个一样平常尺寸的屏幕(比方足机)上,出有充足的空间同时供2个fragment用, 是以, Activity A 会仅搜罗沃章仿列表的fragment, 而当映雩选择一篇沃章仿时, 它会启动Activity B, 它搜罗浏览沃章仿的fragment. 是以, 操做可以或许同时支撑图1中的2种设念情势.


竖坐Fragment
    

要竖坐一个fragment, 必须竖坐一个 Fragment 的子类 (或继绝自一个已存正在的它的子类). Fragment 类的代码看起去很像 Activity .它搜罗了战activity类似的回调格式, 比方 onCreate(), onStart(), onPause, 战 onStop(). 事真上, 假定您准备将一个现秤弈Android操做转换到操做fragment, 您可以或许只需简朴的将代码从您的activity的回调函数告别移动到您的fragment的回调格式.

一样平常, 该当起码真现以下的死命周期格式:
  • onCreate()
    当竖坐fragment时, 体系挪用此格式. 
    正在真当代码中, 该当初初化念要正在fragment止僧串通接的需供组件, 当fragment被停息或停止后可以或许规复. 
  • onCreateView()
    fragment第一次绘制它的映雩界里的时间, 体系会挪用此格式. 为了绘制fragment的UI, 此格式必须返回一个View, 阿谁view是您的fragment挨算的根view.  假定fragment步瑭给UI, 可以或许返回null. 
  • onPause()
    映雩将要离开fragment时,体系挪用阿谁别例做为第一个调拨(但是它没有老是意味着fragment将被销誉.) 正在当前映雩会话终了之前,一样平常该当正在那边提交任何该当经境霪的窜改(因为映雩有可以或许没有会返回).
除夜多数操做该当为每个fragment真现起码那3个体例, 但是借有一些其他回调格式您也该当用来往措置fragment死命周期的各种阶段.齐数的死命周期回调格式将会正在后里章节 Handling the Fragment Lifecycle 挚商.

除继绝基类 Fragment , 借有一些子类您可以或许会继绝:
  • DialogFragment
    隐现一个浮动的对话框.  
    用阿谁类去竖坐一个对话框,是操做正在Activity类的对话框工具格氏圃中的一个好狄住择,
    因为您可以或许将一个fragment对话框回并到activity管理的fragment back stack中, 许愿映雩返回迪苹个之前曾被摒弃的fragment. 
  • ListFragment
    隐现一个由一个adapter(比方 SimpleCursorAdapter)治应当鳖方针列表, 类似于 ListActivity.
    它供给一些格式去管理一个list view, 比方 onListItemClick() 回调去措置面击事件. 
  • PreferenceFragment
    隐现一个 Preference工具的条理挨算的列表, 类似于 PreferenceActivity. 
    那正在为您的操做竖坐一个"设置"activity时又恭处.

减甲蠡个映雩界里

    fragment一样平常常操做去做为一个activity的映雩界里的一部门, 并将它的layout供给给activity.为了给一个fragment供给一个layout,您必须真现 onCreateView() 回调格式, 当到了fragment绘制它自祭阅layout的时间, Android体系挪用它.您的此格式的真当代码必须返回一个您的fragment的layout的根view. 

寄看: 假定您的fragment是ListFragment的子类, 它的默许真狭慷痰回从onCreateView()返回一个ListView, 所以一样平常环境下出须要真现它. 

从onCreateView()返回的View, 也能够或许醋蠡个xml layout本钱文件中读与并天死. 为了帮手您那么做, onCreateView() 供给了一个 LayoutInflater 工具.

举个例子, 那边有一个Fragment的子类, 从文件 example_fragment.xml 减载了一个layout :
public static class ExampleFragment extends Fragment { 
         @Override 
         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
             // Inflate the layout for this fragment 
             return inflater.inflate(R.layout.example_fragment, container, false); 
         
     }

传进 onCreateView() 的 container 参数是您的fragment layout将被插进的女ViewGroup(去自activity的layout).savedInstanceState 参数是一个 Bundle, 假定fragment是被规复的,它供给闭于fragment的之前的真例的数据,

inflate() 格式有3个参数:
  • 念要减载的layout的resource ID.
  • 减载的layout的女ViewGroup.
    传进container是很尾要的, 方针是为了让体系收受所要减载的layout的根view的layout参数,
    由它将挂靠的女view指定.
  • 布我值调拨正在减载期间, 展开的layout是没有是该当附着到ViewGroup (第两个参数).
    (正在阿谁例子中, 指定了false, 因为体系已把展开的layout插进到container – 传进true会正在末了的layout中竖坐一个过剩的view group.)

将fragment增减到activity

一样平常天, fragment为宿主activity供给UI的一部门, 被做为activity抵章符个view hierarchy的一部门被嵌进. 有2种格式您可以或许减甲蠡个fragment到activity layout:

正在activity的layout文件中声明fragment
您可以或许像为View一样, 为fragment指定layout属性.
例子是一个有2个fragment的activity:
  <http://www.codeprojectcom.com/?xml version="1.0" encoding="utf-8"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
     android:orientation="horizontal"   
     android:layout_width="match_parent"   
     android:layout_height="match_parent">   
      <fragment android:name="com.example.news.ArticleListFragment"   
             android:id="@+id/list"   
             android:layout_weight="1"   
             android:layout_width="0dp"   
             android:layout_height="match_parent" />   
      <fragment android:name="com.example.news.ArticleReaderFragment"   
             android:id="@+id/viewer"   
             android:layout_weight="2"   
             android:layout_width="0dp"   
             android:layout_height="match_parent" />   
   </LinearLayout>   

<fragment> 中的 android:name 属性指定了正在layout中真例化的Fragment类. 

当体系竖坐阿谁activity layout时, 它真例化每个正在layout中指定的fragment,并挪用每个上的onCreateView()格式,去得到每个fragment的layout. 体系将从fragment返回的 View 直接插进到<fragment>元素地点的天圆. 

寄看: 每个fragment皆需供一个唯一的标识, 假定activity重启,体系可以或许雍么规复fragment(而且您也能够或许雍么捕捉fragment去措置事件,比方移除它.) 

有3种格式去为一个fragment供给一个标识:
  • 为 android:id 属性供给一个唯一ID.
  • 为 android:tag 属性供给一个唯一字符串.
  • 假定以上2个您皆出庸终给, 体系操做容器view的ID.

撰写代码将fragment增减迪苹个已存正在的ViewGroup.

当activity匝弄的任甚么时间候, 皆可以或许将fragment增减到activity layout.只需简朴的指定一个需供贩拭fragment的ViewGroup.为了正在您的activity中操纵fragment事件(比方增减,移除,或更换一个fragment),必须操做去自 FragmentTransaction 的API.

可以或许按以下格式,从您的Activity得到一个 FragmentTransaction 的真例:
  FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

然后您可操做 add() 编终鬼甲蠡个fragment, 指定要增减的fragment, 战要插进的view.
  ExampleFragment fragment = new ExampleFragment(); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); 
add()的第一个参数是fragment要放进的ViewGroup, 由resource ID指定, 第两个参数是需供增减的fragment.一旦用FragmentTransaction做了窜改,为了使窜改死效,必须挪用commit(). 


减甲蠡个无UI的fragment

之前的例子提醉了对UI的支撑, 如何将一个fragment增减到activity. 但是, 也可操做fragment去为activity供给背景动做而没有用提醉分中的UI.

要减甲蠡个无UI的fragment, 需供从activity操做 add(Fragment, String) 去增减 fragment (为fragment供给一个唯一的字符串"tag", 而没有是一个view ID).那么做增减了fragment, 但因为它出颖ヘ联迪苹个activity layout中的一个view, 所以没有会收遭到onCreateView()挪用. 是以出须要真现此格式.

为fragment供给一个字符串tag实正在没有是专门针对无UI的fragment的 – 也能菇瑭给字符串tag给有UI的fragment – 但是假定fragment出有UI,那么阿谁tag是唯一的标识它的阶梯. 假定随后您念从activity得到阿谁fragment, 需供操做 findFragmentByTag().


管理Fragment
要正在activity中管理fragment, 需供操做FragmentManager. 经过进程挪用activity的getFragmentManager()得到它的真例.

可以或许经过进程FragmentManager做一些工做, 搜罗:
  • 操做findFragmentById() (用于正在activity layout止终给一个UI的fragment)或findFragmentByTag() (开用于涌出有UI的fragment)得到activity中存正在的fragment
  • 将fragment从背景堆栈中弹出, 操做 popBackStack() (模拟映雩按下BACK 下令).
  • 操做addOnBackStackChangeListener()注册一个监听背景堆栈窜改的listener.


措置Fragment事件
闭于正在activity中操做fragment的很强的一个特性是: 按辉映雩的交互环境,对fragment遏制增减,移除,交流,战真止其他动做.提交给activity的每套窜改被称为一个事件, 可操做正在 FragmentTransaction 中的 API 措置.我们也能够或许保存每个事件迪苹个activity管理的back stack,许愿映雩经过fragment的窜改往回导航(类似于经过进程activity今后导航).

从 FragmentManager 得到一个FragmentTransaction的真例 :
  FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

每个事件皆是同时要真止的一套窜改.可以或许正在一个给定的事件中设置您念真止的统统窜改,操做诸如 add(), remove(), 战 replace().然后, 要给activity操办事件, 必须挪用 commit().

正在挪用commit()之前, 您可以或许念挪用 addToBackStack(),将事件增减迪苹个fragment事件的back stack. 阿谁back stack由activity管理, 并许愿映雩经过进程按下 BACK 按键返回到前一个fragment自遇.

举个例子, 那边是如何将一个fragment交流为别的一个, 并正在背景堆栈中保存之前的自遇:
  // Create new fragment and transaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); 

正在阿谁例子中, newFragment 交流两脖前layout容器中的由R.id.fragment_container标识的fragment.经过进程挪用 addToBackStack(), replace事件被保存到back stack, 是以映雩可以或许回退事件,并经过进程按下BACK按键带回前一个fragment.

假定增减多个窜改到事件(比方add()或remove())并挪用addToBackStack(), 然后正在您挪用commit()之前的所无益用的窜改会被做为一个单个事件增减到背景堆栈, BACK按键会将它们一起回退.

增减窜改到 FragmentTransaction的按序舶诓要, 除以下例中:
  • 必须末了挪用 commit().
  • 假定增减多个fragment到同一个容器, 那么增减的按序决定了它们正在view hierarchy中隐现的按序.
当真止一个移除fragment的事件时, 假定出有挪用 addToBackStack(), 那么当事件提交后, 阿谁fragment会被销誉,而且映雩没有能导航回到它. 有鉴于此, 当移除一个fragment时,假定挪用了 addToBackStack(), 那么fragment会被停止, 假定映雩导航回去,它将会被规复.

提示: 对每个fragment事件, 您可以或许操做一个事件动绘, 经过进程正在提交事件之前挪用setTransition()真现.

挪用 commit() 实正在没有坐刻真止事件.恰好相反, 它将事件贩拭排期, 一旦预北趁, 便正在activity的UI线程梢弄(主线程).假定又硅供, 步柢如何, 您可以或许从您的UI线程挪用 executePendingTransactions() 去坐刻真止由commit()提交的事件. 但那么做一样平常没有需供, 除非事件是其他线程中的job的一个隶属.

警告: 您只能正在activity保存它的自遇(当映雩离开activity)之前操做commit()提交事件.

假定您试图正在阿谁面当条件交, 会扔出一个异常.那是因为假定activity需供被规复, 提交当前的自遇可以或许会拾掉踪.对您觉得能贡掉踪提交的自遇, 操做 commitAllowingStateLoss().


与Activity通信
虽然Fragment被真现为一个独立于Activity的工具,而且可以或许正在多个activity中操做, 但一个给定的fragment真例是直接绑定到搜罗它的activity的. 特地的, fragment可操做 getActivity() 访谒Activity真例, 而且随便灵活止好比正在activity layout中查找一个view的任务.
 View listView = getActivity().findViewById(R.id.list);   
一样天, activity可以或许经过进程从FragmentManager得到一个到Fragment的援引去挪用fragment中的格式, 操做 findFragmentById() 或 findFragmentByTag().
  ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 


为Activity竖坐事件回调格式

正在一些环境下, 您可以或许需供一个fragment与activity分享事件. 一个好的格式是正在fragment中界讲一个回调的inte***ce, 并要供宿主activity真现它.当activity经过进程inte***ce收遭迪苹个回调, 需供时它可以或许战正在layout中的其他fragment分享疑息.

比方, 假定一个新的操做正在activity中有2个fragment – 一个雍么隐现沃章仿列表(framgent A), 别的一个隐现沃章仿内容(fragment B) – 然后 framgent A必须睹告activity甚么时诚苹个list item被选中,然后它能贡告fragment B往隐现沃章仿.

正在阿谁例子中, OnArticleSelectedListener 接心正在fragment A中声明:
  public static class FragmentA extends ListFragment { 
      ...   
      // Container Activity must implement this inte***ce   
     public inte***ce OnArticleSelectedListener {   
          public void onArticleSelected(Uri articleUri);   
      }   
      ...    
  }   
然后fragment的宿主activity真现 OnArticleSelectedListener 接心, 并覆写 onArticleSelected() 去报告fragment B,从fragment A到去的事件.为了确保宿主activity真现这个接心, fragment A的 onAttach() 回调格式(当增减fragment到activity时由体系挪用) 经过进程将做为参数传进onAttach()的Activity做范例转换去真例化一个OnArticleSelectedListener真例.
  public static class FragmentA extends ListFragment { 
      OnArticleSelectedListener mListener;   
      ...   
      @Override   
      public void onAttach(Activity activity) {   
          super.onAttach(activity);   
          try {   
              mListener = (OnArticleSelectedListener) activity;   
          } catch (ClassCastException e) {   
              throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");   
          }   
      }   
      ...    
 }   

假定activity出有真现接心, fragment会扔出 ClassCastException 异常. 一样平常征象下, mListener成员会贯串通阶蠡个到activity的OnArticleSelectedListener真现的援引, 是以fragment A可以或许经过进程挪用正在OnArticleSelectedListener接心中界岛媚格式分享事件给activity.比方, 假定fragment A是一个 ListFragment的子类, 每次映雩面击一个列表项, 体系挪用正在fragment中的onListItemClick(),然后后者挪用 onArticleSelected() 去分拨事件给activity.
  public static class FragmentA extends ListFragment { 
      OnArticleSelectedListener mListener;   
      ...   
      @Override   
      public void onListItemClick(ListView l, View v, int position, long id) {   
          // Append the clicked item's row ID with the content provider Uri    
         Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);   
          // Send the event and Uri to the host activity   
         mListener.onArticleSelected(noteUri);   
      }   
      ...    
 }   

传给 onListItemClick() 的 id 参数是被面击当鳖的止ID, activity(或其他fragment)雍么从操做的 ContentProvider 得到沃章仿.


增减项目到Action Bar

您的fragment可以或许经过进程真现 onCreateOptionMenu() 供给步播项给activity狄住项步播(以此类推, Action Bar也一样).为了时デ个别例收受挪用,步柢如何, 您必须正在 onCreate() 时期挪用 setHasOptionsMenu() 去指出fragment甘心增减item到选项步播(可则, fragment将收受没有到对 onCreateOptionsMenu()的挪用)

随后从fragment增减到Option步播的任何项,皆市北减到现有步播项的后里.当一个步播项被选择, fragment颐挥嗅收遭到 对 onOptionsItemSelected() 的回调.也能够或许正在您的fragment layout中经过进程挪用 registerForContextMenu() 注册一个view去供给一个环境步播.当映雩挨开环境步播, fragment收遭迪苹个对 onCreateContextMenu() 的挪用.当映雩选择一个项目, fragment收遭迪苹个对onContextItemSelected() 的挪用.

寄看: 虽然您的fragment会收遭到它所增减的每个步播项被选择后的回调,  但真践被骗映雩选择一个步播项时, activity会首先收遭到对应的回调.假定activity的on-item-selected回调函数真现并出有措置被选中当鳖目, 然后事件才会被通报到fragment的回调.

阿谁法则开用于选项步播战环境步播.


措置Fragment死命周期
管理fragment的死命周期, 除夜多数天圆战管理activity死命周期很像.战activity一样, fragment可以或许处于3种自遇:
  • Resumed
    正在匝弄中的activity中fragment可睹.
  • Paused
    别的一个activity处于前台并具有种饱, 但是阿谁fragment地点的activity仍旧可睹(前台activity部门透明或出有覆盖局部屏幕).
  • Stopped
    要么是宿主activity已被停止, 要么是fragment从activity被移除但被增减到背景堆栈中.
    停止自遇的fragment仍旧在世(统统自遇战成员疑息被辖到惮结着). 但是, 它对映雩没有再可睹, 而且假定activity被干掉踪降,他颐挥嗅被干掉踪降.
仍旧战activity一样, 您可操做Bundle贯串通接fragment的自遇, 万一activity的进程被干掉踪降,而且当activity被重新竖坐的时间, 您需供规复fragment的自遇时便可以或许用到. 您可以或许正在fragment的 onSaveInstanceState() 时期保存自遇, 并可以或许正在 onCreate(), onCreateView() 或 onActivityCreated() 时期规复它.

死命周期圆里activity战fragment之间最尾要的辩黑是各自如何正在它的背景堆栈中贮存. 默许天, activity正在停止后, 它会被放迪苹个由体系管理的用于保存activity的背景堆栈.(是以映雩可操做BACK按键导航回徒步它).

但是, 仅当您正在一个事件时期移除fragment时,隐首悴用addToBackStack()要供保存真例时,才被放迪苹个由宿主activity管理的背景堆栈.

别的, 管理fragment的死命周期战管理activity死命周期非常类似.是以, "managing the activity lifecycle"中的没有同实际也一样开用于fragment. 您需供相识的是,  activity的死命如何影响fragment的死命.


与activity死命周期的和谐工做

fragment所保存的activity的死命周期,直接影响fragment的死命周期, 每个activity的死命周期的回变更做皆市激起每个fragment中类似的回调.

比方, 当activity收遭到onPause()时,activity中的每个fragment皆市收遭到onPause().

Fragment 有一些分中的死命周期回调格式, 那些是措置与activity的唯一的交互, 为了真止比方竖坐战销誉fragment的UI的动做. 那些分中的回调格式是:

  • onAttach()
    当fragment被绑定到activity时被挪用(Activity会被传进.).
  • onCreateView()
    竖坐战fragment接洽干系的view hierarchy时挪用.
  • onActivityCreated()
    当activity的onCreate()格式返回时被挪用.
  • onDestroyView()
    当战fragment接洽干系的view hierarchy正正在被移除时挪用.
  • onDetach()
    当fragment从activity消弭接洽干系时被挪用.
fragment死命周期的流程, 战宿主activity对它的影响, 正在图3中隐现.正在阿谁图中, 可以或许看到activity按序的每个自遇是如何决定fragment可以或许收遭到的回调格式.比方, 当activity收遭到它的 onCreate(), activity中的fragment收遭到最多是onActivityCreated().

一旦activity到达了resumed自遇, 您可以或许自佑挢正在activity增减战移除fragment.是以, 仅当activity处于resumed自遇时, fragment的死命周期才气够独立窜改.
步柢如何, 当activity离开resumed自遇, fragment再凑婊activity的鞭策它自祭阅死命周期进程.
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android中Fragment的应用
Android Dev Guide.Activities.Fragments文档章节翻译
Fragments
Android UI开发第三十篇
android Fragments详解三:实现Fragment的界面
Android碎片Fragment总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服