Android Fragment

为了兼容平板,Android从3.0开始引入了Fragment。

1. 生命周期

Android Fragment_第1张图片
Fragment生命周期

2. 常用的操作函数

  1. FragmentManager:
  getFragmentManager() // v4中,getSupportFragmentManager
  1. FragmentTransaction: Fragment的原子性操作
  FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
transaction.add(); //往Activity中添加一个Fragment
transaction.remove(); //从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。
transaction.replace(); //使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
transaction.hide(); //隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
transaction.show(); //显示之前隐藏的Fragment
detach(); //会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
attach(); //重建view视图,附加到UI上并显示。
transatcion.commit()//提交一个事务
  1. addToBackStack:
  addToBackStack(null); // 将当前的Fragement事务添加到了回退栈

3. Fragement通信

基本思想是通过宿主Activity进行通信,结合第二篇参考文章给一个示例:

// FragmentOne 
public class FragmentOne extends Fragment implements OnClickListener {  
    private Button mBtn;  
    /** 
     * 设置按钮点击的回调 
     */  
    public interface FOneBtnClickListener{  
        void onFOneBtnClick();  
    }  

    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {  
        ...
        mBtn = (Button) view.findViewById(R.id.id_fragment_one_btn);  
        mBtn.setOnClickListener(this);  
        return view;  
    }  
  
    /** 
     * 点击fragment中的按钮时, 交给宿主Activity处理,如果它希望处理 
     */  
    @Override  
    public void onClick(View v)  {  
        if (getActivity() instanceof FOneBtnClickListener) {  
            ((FOneBtnClickListener) getActivity()).onFOneBtnClick();  
        }  
    }  
}  

// FragmentTwo
public class FragmentTwo extends Fragment implements OnClickListener  {  
  
    private Button mBtn ;  
      
    private FTwoBtnClickListener fTwoBtnClickListener ;  
      
    public interface FTwoBtnClickListener {  
        void onFTwoBtnClick();  
    }  
    //设置回调接口  
    public void setfTwoBtnClickListener(FTwoBtnClickListener fTwoBtnClickListener) {  
        this.fTwoBtnClickListener = fTwoBtnClickListener;  
    }  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {  
       ...
        mBtn = (Button) view.findViewById(R.id.id_fragment_two_btn);  
        mBtn.setOnClickListener(this);  
        return view ;   
    }  
    @Override  
    public void onClick(View v) {  
        if(fTwoBtnClickListener != null)  
        {  
            fTwoBtnClickListener.onFTwoBtnClick();  
        }  
    }  
}  

// mainActivity
public class MainActivity extends Activity implements FOneBtnClickListener,  FTwoBtnClickListener  {  
  
    private FragmentOne mFOne;  
    private FragmentTwo mFTwo;  
    private FragmentThree mFThree;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState)  {  
       ...
        mFOne = new FragmentOne();  
        FragmentManager fm = getFragmentManager();  
        FragmentTransaction tx = fm.beginTransaction();  
        tx.add(R.id.id_content, mFOne, "ONE");  
        tx.commit();  
    }  
  
    /** 
     * FragmentOne 按钮点击时的回调 
     */  
    @Override  
    public void onFOneBtnClick(){  
        if (mFTwo == null)  {  
            mFTwo = new FragmentTwo();  
            mFTwo.setfTwoBtnClickListener(this);  
        }  
        ...
    }  
  
    /** 
     * FragmentTwo 按钮点击时的回调 
     */  
    @Override  
    public void onFTwoBtnClick() {  
      // fragementTwo的点击事件
      ....
    }  
}  

参考文章

  • Android Fragment 真正的完全解析(上)
  • Android Fragment 真正的完全解析(下)

你可能感兴趣的:(Android Fragment)