android学习笔记Fragment的使用
Fragment的內容感覺好多啊,主要需要掌握Fragment靜態加載,Fragment動態加載,Fragment的生命周期,Fragment與Activity的交互
1,Fragment的靜態加載
在activity的layout文件中聲明Fragment,需要特別注意的是《fragment》中的android:name屬性指定了在laytout中實例化的Fragemnt類
標示Fragment的方法
android:id 屬性提供唯一的id
android:name 屬性提供唯一的name
Fragment靜態加載比較簡單,可以當成普通的控件直接寫在activity的布局中,
<LinearLayoutandroid:id="@+id/frame"android:orientation="vertical"android:layout_weight="0.8"android:layout_width="match_parent"android:layout_height="0dp"><fragmentandroid:layout_width="match_parent"android:layout_height="match_parent"android:name="com.example.lining.myapplication.MyFragment"android:id="@+id/fragment1"></fragment></LinearLayout>然后需要寫一個類繼承自Fragment,實現里面的onCreateView方法。該方法中加載自定義的MyFragment布局文件。如下方式
public class MyFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {//return super.onCreateView(inflater, container, savedInstanceState);\/*把layout布局文件轉換成viewresource:要加載的布局文件container:加載layout的viewgroupattachToRoot:false 不返回viewgroup*/View view = inflater.inflate(R.layout.fragment1,container,false);return view;} }當然肯定還得有Fragment的布局,
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent" android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="New Text"android:id="@+id/fragment1text" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="New Button"android:id="@+id/fragment1btn" /></LinearLayout>上面的代碼,一個靜態加載就可以暫時完成了。
2,動態加載
拽寫代碼將fragment添加到activity中。add() :添加一個fragment(指定要添加的fragemnt和要插入的view)于此類似的還有remove 和 替換 replace。
? 處理fragment事務:根據用戶的交互情況,對fragemnt進行添加,移除,替換以及執行其他動作,提交給activity的每一套動作成為一個事務
FragmentManager fragmentManager = getFragmentManager();
? ? FragmentTransaction fragmentTransaction = fragmentManaget.beginTransaction();
每一套事務都是同時執行一套變化,可以在一套事務中設置你所有想執行的變化。包括add(),replace,remove 然后提交給activity 。必須調用commit()方法
如果允許用戶通過back鍵返回到前一個fragment調用commit之前可以加入addtobackstack方法
myFragment2 = new MyFragment2();FragmentManager fragmentManager = getFragmentManager();FragmentTransaction beginTransaction = fragmentManager.beginTransaction();beginTransaction.add(R.id.frame,myFragment2);beginTransaction.addToBackStack(null);beginTransaction.commit();R.id.frame 就是fragment的父view。
3,Fragment的生命周期
開啟應用:onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume
隱藏應用:onPause->onStop
恢復應用:onStart->onResume
切換其他Fragment:onPause->onStop->onDestroyView
返回該Fragment:onCreateView->onActivityCreated->onStart->onResume
退出應用:onPause->onStop->onDestroyView->onDestroy->onDeAttach
4,Fragment與Activity交互
?
Activity->Fragment ?: 這個只需要在activity中保存fragment的引用,就可以直接調用fragment的方法,進行傳值等等。如果沒有保存fragment的引用,那么
就需要通過getFragmentManager.findFragmentByTag()或者findFragmentById()獲得任何Fragment實例,然后進行操作。
Fragment->Activity ?:?在Fragment中可以通過getActivity得到當前綁定的Activity的實例,然后進行操作。
public class MyFragment2 extends Fragment implements View.OnClickListener{private TextView textView;
private Button btn;
private MyListening myListening;
public interface MyListening
{
void thank(String str);
}
@Override
public void onAttach(Activity activity) {
myListening = (MyListening)activity;
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//return super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment1,container,false);
btn = (Button)view.findViewById(R.id.fragment1btn);
btn.setOnClickListener(this);
textView =(TextView) view.findViewById(R.id.fragment1text);
return view;
}
public void setText(String name){
textView.setText(name);
}
@Override
public void onClick(View v) {
myListening.thank("i am fragment");
}
}
然后在Acitvity中實現該接口就行。
@Overridepublic void thank(String str) {Toast.makeText(getBaseContext(),str,Toast.LENGTH_LONG).show();}?
轉載于:https://www.cnblogs.com/techdreaming/p/4957533.html
總結
以上是生活随笔為你收集整理的android学习笔记Fragment的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20151110
- 下一篇: 验证码 禁止输入中文