初學_Android4進階編程-2 Fragment

來源:互聯網
上載者:User

標籤:

Fragment允許將activity拆分成多個完全獨立封裝的可重用控制項。每個組件有它自己的生命週期和UI布局。(類似於一個嵌入在activity中的activity)
通過繼承Fragment來建立一個新的Fragment,大多數情況下,需要為Fragment分配一個UI(xml布局檔案),也可以建立一個沒有任何UI的後台行為的Fragment。

public class MyFragment extends Fragment{

//調用該方法串連它的父Activity
@Override
public void onAttach(Activity Activity){
  super.onAttach(Activity);
  //擷取對父Activity的引用
}

//調用該方法來進行Fragment的初始建立
@Override
public void onCreate(Bundle saveInstanceState){
  super.onCreate(saveInstanceState);
  //初始化Fragment
}

//Fragment建立完畢後,繼續建立它自己的使用者介面時調用該方法
@Override
public void onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState){
  //建立或填充Fragment的UI,並返回它,沒有UI返回null
  return inflater.inflate(R.layout.head_fragment_viead, container, false);
}

//一旦父Activity和Fragment的UI已被建立,則調用該方法。
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
//完成初始化---尤其是父Activity被初始化完成後或者Fragment的View被完全填充
後才能做的事
}

//在可見生命週期開始時調用
@Override
public void onStart(){
  super.onStart();
  //應用所有需要的UI變化,現在Fragment是可見的
}

//在活動生命週期開始時調用
@Override
public void onResume(){
  super.onResume();
  //恢複所有暫停Fragment需要的UI更新,線程或進程。但在非使用中是暫停
}

//在活動生命週期結束時調用
@Override
public void onPause(){
  //當Fragment不是活動的前台Fragment時,需要暫停UI的更新,掛起線程或者暫停那些不需要更新的CPU的集中處理。由於調用這個方法後,進程可能被終止,所以要儲存  所有的編輯和狀態改變資訊
  super.onPause();
}

//當活動生命週期結束時,調用該方法儲存UI的狀態變化
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
  //將UI的狀態改變資訊儲存到savedInstanceState中
  super.onSaveInstanceState(savedInstanceState);
}

//在可見生命週期結束時調用
@Override
public void onStop(){
  //當Fragment不可見時,暫停其餘的UI更新、掛起線程或者暫停不再需要的處理
  super.onStop();
}

//當Fragment的View被分離時,調用該方法
@Override
public void onDestroyView(){
  //清楚資源相關的View
  super.onDestroyView();
}


//在整個生命週期結束時調用該方法
@Override
public void onDestroy(){
  //清楚所有的資源,包括結束線程和關閉資料庫連接等
  super.onDestroy();
}

//當Fragment從它的父Activity上分離時,調用該方法
@Override
public void onDetach(){
  super.onDetach();
}
}

通過靜態方式向Activity中填充Fragment。
<fragment
android:name="package.MyFragment"
/>

通過動態方式向Activity中填充Fragment。
Fragment狀態轉換與他相應的Activity的狀態轉換密切相關。當Fragment暫停或停止時,儲存的所有的UI狀態和持久化的資料非常重要。

每個Activity都包含一個Fragment Manager來管理它包含的Fragment。
//得到FragmentManager
FragmentManager fragmentManager = getFragmentManager();
//得到FragmentTransaction
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//添加,刪除,替換,指定動畫,添加到back棧中。
//添加
fragmentTransaction.add(R.id.title_fragment,new MyFragment());
//尋找,刪除
Fragment fragment = fragmentManager.findFragmentById(R.id.title_fragment)
fragmentTransaction.remove(fragment);
//替換
fragmentTransaction.replace(R.id.body_fragment,new BodyFragment(index))
//設定back棧
String tag = null;
fragmentTransaction.addToBackStack(tag);
//添加動畫,接收兩個動畫XML
fragmentTransaction.setCustomAnimations(R.animator.silde_in_left,
R.animator.silde_out_right);
fragmentTransaction.commit();


?通過回調介面向Activity通訊。在Fragment需要和它的主Activity共用事件的地方,最好在Fragment中建立一個callback介面,而主Activity必須實現它。

private MyListener myListener;
private String str;
public interface MyListener{
  public void getStr(String str);
}
public void onAttach(Activity activity){
  super.onAttach(activity);
  //catch異常
  myListener = (MyListener)activity;
  str = new String("callback");
  myListener.getStr(str);
}

沒有使用者介面的Fragment適合於定期和UI互動的背景工作或者因配置改變而導致Activity重新啟動時,儲存狀態變得特別重要的場合。

fragmentManager.beginTransaction.add(workerFragment,TAG).commit;
myFragment = (MyFragment) fragmentManager.findFragmentByTag(TAG);

使用方便的Fragment子類。DialogFragment,ListFragment,WebViewFragment。

初學_Android4進階編程-2 Fragment

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.