一起学Android之Fragment

移动开发 作者: 2024-08-24 14:45:01
本文以一个简单的小例子,简述在Android开发中,Fragment的常见用法,仅供学习分享使用,如有不足之处,还请指正。
  • Fragment 所有自定义Fragment的父类。
  • FragmentManager Fragment管理器对象,用来动态新增和替换Fragmentd对象。
  • FragmentTransaction 表示一个Fragment管理事务,必须以commit()结束。
  • onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) 方法,返回Fragment对应的布局视图。
  • getFragmentManager() 返回一个Fragment管理器对象。
 1 public class RightFragment extends Fragment {
 2 
 3     private TextView tvMsg;
 4 
 5     @Override
 6     public View onCreateView(LayoutInflater inflater, 7                              Bundle savedInstanceState) {
 8         // Inflate the layout for this fragment
 9         Log.i("TAG","------------Right-----------onCreateView: ");
10         View view= inflater.inflate(R.layout.fragment_right,container,false11         tvMsg= (TextView) view.findViewById(R.id.tv_msg);
12         return view;
13     }
14 }
 1 05-30 22:16:02.207 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onAttach: 
 2 05-30 22:16:02.207 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onCreate: 
 3 05-30 22:16:02.207 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onCreateView: 
 4 05-30 22:16:02.216 29479-29479/com.hex.demofragment I/TAG: ------------Right----------- 5 05-30 22:16:02.216 29479-29479/com.hex.demofragment I/TAG: ------------Right----------- 6 05-30 22:16:02.216 29479-29479/com.hex.demofragment I/TAG: ------------Right----------- 7 05-30 22:16:02.218 29479-29479/com.hex.demofragment E/TAG: ------------Main----------- 8 05-30 22:16:02.218 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onActivityCreated: 
 9 05-30 22:16:02.218 29479-29479/com.hex.demofragment I/TAG: ------------Right-----------10 05-30 22:16:02.219 29479-29479/com.hex.demofragment E/TAG: ------------Main-----------onStart: 
11 05-30 22:16:02.219 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------12 05-30 22:16:02.219 29479-29479/com.hex.demofragment I/TAG: ------------Right-----------13 05-30 22:16:02.224 29479-29479/com.hex.demofragment E/TAG: ------------Main-----------onResume: 
14 05-30 22:16:02.224 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------15 05-30 22:16:02.224 29479-29479/com.hex.demofragment I/TAG: ------------Right-----------16 05-30 22:16:06.188 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onPause: 
17 05-30 22:16:06.188 29479-29479/com.hex.demofragment I/TAG: ------------Right-----------18 05-30 22:16:06.189 29479-29479/com.hex.demofragment E/TAG: ------------Main-----------19 05-30 22:16:06.756 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onStop: 
20 05-30 22:16:06.756 29479-29479/com.hex.demofragment I/TAG: ------------Right-----------21 05-30 22:16:06.756 29479-29479/com.hex.demofragment E/TAG: ------------Main-----------22 05-30 22:16:06.757 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onDestroyView: 
23 05-30 22:16:06.757 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onDestroy: 
24 05-30 22:16:06.757 29479-29479/com.hex.demofragment I/TAG: ------------Left-----------onDetach: 
25 05-30 22:16:06.757 29479-29479/com.hex.demofragment I/TAG: ------------Right-----------26 05-30 22:16:06.757 29479-29479/com.hex.demofragment I/TAG: ------------Right-----------27 05-30 22:16:06.757 29479-29479/com.hex.demofragment I/TAG: ------------Right-----------28 05-30 22:16:06.757 29479-29479/com.hex.demofragment E/TAG: ------------Main-----------onDestroy: 
View Code
静态添加Fragment
<?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height 7     android:orientation="horizontal"
 8     tools:context="com.hex.demofragment.MainActivity">
 9    fragment
10        android:tag="left"
11        android:id="@+id/left_fragment"
12        class="com.hex.demofragment.LeftFragment"
13        android:layout_width="200dp"
14        android:layout_height15        android:layout_weight="1"></fragment16     17         ="right"
18         android:id="@+id/right_fragment"
19         class="com.hex.demofragment.RightFragment"
20         android:layout_width="300dp"
21         android:layout_height22         android:layout_weight="2"23 </LinearLayout>
  • 提供android:id带有唯一的ID属性。
  • 提供android:tag带有唯一字符串的标签属性。
  • 如果没有提供前面两个中的任何一个,系统将使用容器视图的id。
动态添加Fragment
FragmentManager是Activity内部用来与Fragment进行交互的接口
 2 FragmentManager fm =  getFragmentManager();
 3 FragmentTransaction  ft=fm.beginTransaction();
 4 将左侧Fragment和Frame控件关联起来
 5 left=new LeftFragment();
 6 left.setTransData(transData);
ft.add(R.id.fl_left,left);
 8 right= RightFragment();
 9 ft.add(R.id.fl_right,right);
10 ft.commit();
1 interface ITransData {
2     void transData(Bundle bundle);
3 }
 ITransData mTransData;
 3  setTransData(ITransData transData){
 4     this.mTransData=transData;
}
 6 
@Override
 8                          Bundle savedInstanceState) {
10 
11     View view = inflater.inflate(R.layout.fragment_left,1)">12     Button tv= (Button) view.findViewById(R.id.bn_left);
13     tv.setOnClickListener( View.OnClickListener() {
14         @Override
15          onClick(View v) {
16             if(mTransData!=null){
17                 Bundle bundle= Bundle();
18                 bundle.putString("name","我是左边"19                 mTransData.transData(bundle);
20             }
21         }
22     });
23     24 }
protected  onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
 5     ITransData transData= TransData();
 7     FragmentManager fm = 8     FragmentTransaction  ft= 9     10     left=11     left.setTransData(transData);将接口传递给LeftFragment
12     ft.add(R.id.fl_left,1)">13     right=    ft.add(R.id.fl_right,1)">15     ft.commit();
16 }
class TransData implements ITransData
{
 transData(Bundle bundle) {
 5         String name=bundle.getString("name","空" 6         if(right!=            right.setTransData(name);
10 }
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_67872.html
一起学Android之Fragment