Android中的Fragment类使用进阶

2019-12-10 18:09:36于海丽


ContentActivity:

public class ContentActivity extends FragmentActivity 
{ 
 
  private ContentFragment mContentFragment; 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_single_fragment); 
   
    FragmentManager fm = getSupportFragmentManager(); 
    mContentFragment = (ContentFragment) fm.findFragmentById(R.id.id_fragment_container); 
     
    if(mContentFragment == null ) 
    { 
      String      mContentFragment = ContentFragment.newInstance(title); 
      fm.beginTransaction().add(R.id.id_fragment_container,mContentFragment).commit(); 
    } 
 
  } 
} 

有没有发现两个Activity中的代码极其的类似,且使用了同一个布局文件:
activity_single_fragment.xml

<RelativeLayout xmlns:android="http://www.easck.com/apk/res/android" 
  xmlns:tools="http://www.easck.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:id="@+id/id_fragment_container" 
> 
 
 
</RelativeLayout> 

为什么要贴这Acticity的代码呢?因为我们项目中,如果原则上使用Fragment,会发现大量类似的代码,那么我们就可以抽象一个Activity出来,托管我们的Single Fragment。

4、SingleFragmentActivity
于是抽象出来的Activity的代码为:

package com.example.demo_zhy_23_fragments; 
 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
 
public abstract class SingleFragmentActivity extends FragmentActivity 
{ 
  protected abstract Fragment createFragment(); 
   
  @Override 
  protected void onCreate(Bundle savedInstanceState) 
  { 
 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_single_fragment); 
   
    FragmentManager fm = getSupportFragmentManager(); 
    Fragment fragment =fm.findFragmentById(R.id.id_fragment_container); 
     
    if(fragment == null ) 
    { 
      fragment = createFragment() ; 
       
      fm.beginTransaction().add(R.id.id_fragment_container,fragment).commit(); 
    } 
  } 
   
}