Android Fragment学习笔记

本程序的重点是在一个Activity中放入了两个Fragment。Android Fragment学习笔记


   页面布局如下面代码(fragment_hide_show.xml):

[java] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical"  
  5.     android:gravity="center_horizontal"  
  6.     android:layout_width="match_parent" android:layout_height="match_parent">  
  7.   
  8.     <TextView android:layout_width="match_parent" android:layout_height="wrap_content"  
  9.         android:gravity="center_vertical|center_horizontal"  
  10.         android:textAppearance="?android:attr/textAppearanceMedium"  
  11.         android:text="Demonstration of hiding and showing fragments." />  
  12.   
  13.     <LinearLayout android:orientation="horizontal" android:padding="4dip"  
  14.         android:gravity="center_vertical" android:layout_weight="1"  
  15.         android:layout_width="match_parent" android:layout_height="wrap_content">  
  16.   
  17.         <Button android:id="@+id/frag1hide"  
  18.             android:layout_width="wrap_content" android:layout_height="wrap_content"  
  19.             android:text="Hide" />  
  20.           
  21.         <fragment android:name="polycom.com.cn.FirstFragment"  
  22.                 android:id="@+id/fragment1" android:layout_weight="1"  
  23.                 android:layout_width="0px" android:layout_height="wrap_content" />  
  24.   
  25.     </LinearLayout>  
  26.   
  27.     <LinearLayout android:orientation="horizontal" android:padding="4dip"  
  28.         android:gravity="center_vertical" android:layout_weight="1"  
  29.         android:layout_width="match_parent" android:layout_height="wrap_content">  
  30.   
  31.         <Button android:id="@+id/frag2hide"  
  32.             android:layout_width="wrap_content" android:layout_height="wrap_content"  
  33.             android:text="Hide" />  
  34.           
  35.         <fragment android:name="polycom.com.cn.SecondFragment"  
  36.                 android:id="@+id/fragment2" android:layout_weight="1"  
  37.                 android:layout_width="0px" android:layout_height="wrap_content" />  
  38.   
  39.     </LinearLayout>  
  40.   
  41. </LinearLayout>  

在每一个LinearLayout里均有一个Fragment,以下是java代码实现。主要分为三个.java文件,其中FragmentActivity.java主要是设置了两个按钮监听器,用来控制显示和隐藏Fragment中的内容,FirstFragment.java、SecondFragment.java主要是为Fragment加载显示页面。

FragmentActivity.java

[java] view plaincopy
  1. import android.app.Activity;  
  2. import android.app.Fragment;  
  3. import android.app.FragmentManager;  
  4. import android.app.FragmentTransaction;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9.   
  10. public class FragmentActivity extends Activity {  
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.fragment_hide_show);  
  15.   
  16.         FragmentManager fm = getFragmentManager();  
  17.           
  18.         //下面的两行代码是在Activity中按钮添加监听事件,控制Fragment的显示和隐藏  
  19.         addShowHideListener(R.id.frag1hide, fm.findFragmentById(R.id.fragment1));  
  20.         addShowHideListener(R.id.frag2hide, fm.findFragmentById(R.id.fragment2));  
  21.     }  
  22.   
  23.     void addShowHideListener(int buttonId, final Fragment fragment) {  
  24.         //获取activity中的button  
  25.         final Button button = (Button)findViewById(buttonId);  
  26.         button.setOnClickListener(new OnClickListener() {  
  27.             public void onClick(View v) {  
  28.                 FragmentTransaction ft = getFragmentManager().beginTransaction();  
  29.                 /*为Fragment设置淡入淡出效果,Android开发网提示这里这两个动画资源是android内部资源无需我们手动定义。*/  
  30.                 ft.setCustomAnimations(android.R.animator.fade_in,  
  31.                         android.R.animator.fade_out);   
  32.                   
  33.                 if (fragment.isHidden()) {  
  34.                     ft.show(fragment);  
  35.                     button.setText("隐藏");  
  36.                 } else {  
  37.                     ft.hide(fragment);  
  38.                     button.setText("显示");  
  39.                 }  
  40.                 ft.commit();  
  41.             }  
  42.         });  
  43.     }  
  44. }  

FirstFragment.java

[java] view plaincopy
  1. import android.app.Fragment;  
  2. import android.os.Bundle;  
  3. import android.view.LayoutInflater;  
  4. import android.view.View;  
  5. import android.view.ViewGroup;  
  6. import android.widget.TextView;  
  7.   
  8. public class FirstFragment extends Fragment {  
  9.     TextView mTextView;  
  10.   
  11.     @Override  
  12.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  13.             Bundle savedInstanceState) {  
  14.         //从文件 example_fragment.xml 加载了一个layout   
  15.         View v = inflater.inflate(R.layout.labeled_text_edit, container, true);  
  16.           
  17.         View tv = v.findViewById(R.id.msg);  
  18.         ((TextView)tv).setText("The fragment saves and restores this text.");  
  19.   
  20.         mTextView = (TextView)v.findViewById(R.id.saved);  
  21.         if (savedInstanceState != null) {  
  22.             mTextView.setText(savedInstanceState.getCharSequence("text"));  
  23.         }  
  24.         return v;  
  25.     }  
  26.   
  27.     @Override  
  28.     public void onSaveInstanceState(Bundle outState) {  
  29.         super.onSaveInstanceState(outState);  
  30.   
  31.         outState.putCharSequence("text", mTextView.getText());  
  32.     }  
  33. }  
SecondFragment.java

[java] view plaincopy
  1. import android.app.Fragment;  
  2. import android.os.Bundle;  
  3. import android.view.LayoutInflater;  
  4. import android.view.View;  
  5. import android.view.ViewGroup;  
  6. import android.widget.TextView;  
  7.   
  8. public class SecondFragment extends Fragment {  
  9.   
  10.     @Override  
  11.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  12.             Bundle savedInstanceState) {  
  13.         //从文件 example_fragment.xml 加载了一个layout   
  14.         View v = inflater.inflate(R.layout.labeled_text_edit, container, true);  
  15.         View tv = v.findViewById(R.id.msg);  
  16.         ((TextView)tv).setText("The TextView saves and restores this text.");  
  17.         //另外一种TextView的保存模式  
  18.         ((TextView)v.findViewById(R.id.saved)).setSaveEnabled(true);  
  19.         return v;  
  20.     }  
  21. }  

下面是Fragment中加载的布局文件(labeled_text_edit.xml)

[java] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical" android:padding="4dip"  
  5.     android:layout_width="match_parent" android:layout_height="wrap_content">  
  6.   
  7.     <TextView android:id="@+id/msg"  
  8.         android:layout_width="match_parent" android:layout_height="wrap_content"  
  9.         android:layout_weight="0"  
  10.         android:paddingBottom="4dip" />  
  11.   
  12.     <EditText android:id="@+id/saved"  
  13.         android:layout_width="match_parent" android:layout_height="wrap_content"  
  14.         android:layout_weight="1"  
  15.         android:text="@string/initial_text"  
  16.         android:freezesText="true">  
  17.         <requestFocus />  
  18.     </EditText>  
  19.   
  20. </LinearLayout>  

http://download.csdn.net/detail/flying_tao/3422836

上一篇:每周一企 | 「PIX像素智能」基于阿里云打造无人驾驶新生态


下一篇:认识红黑树,解决二叉树删除后遗症 | 带你学《Java语言高级特性》之四十一