Android学习——碎片Fragment的使用

一、碎片的简单用法(实现在一个活动中添加两个碎片,并让这两个碎片平分活动空间)

1、新建一个FragmentTest项目;

新建一个左侧碎片布局left_fragment.xml,代码如下:(只放置一个按钮并水平居中显示)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6     <Button
 7         android:id="@+id/button"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:layout_gravity="center_horizontal"
11         android:text="Button"
12         />
13 </LinearLayout>

新建右侧碎片布局right_fragment.xml,代码如下:(布局背景设置成蓝色并放置一个TextView用于显示文本)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:background="@color/colorPrimaryDark">
 7 
 8     <TextView
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_gravity="center_horizontal"
12         android:textSize="20sp"
13         android:text="This is right fragment"
14         />
15 </LinearLayout>

2、新建一个LeftFragment类,并让它继承Fragment(注意这里的Fragment使用support-v4中的),代码如下:

1 public class LeftFragment extends Fragment{
2     @Override
3     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
4         View view=inflater.inflate(R.layout.left_fragment,container,false);
5         return view;
6     }
7 }

重写了Fragment的onCreateView()方法,然后在这个方法中通过LayoutInflater的inflate()方法将刚才定义的left_fragment布局动态加载进来。

新建RightFragment类,同样继承Fragment,代码如下:

1 public class RightFragment extends Fragment {
2     @Override
3     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
4         View view=inflater.inflate(R.layout.right_fragment,container,false);
5         return view;
6     }
7 }

3、修改activity_main.xml中的代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     >
 6    <fragment
 7        android:id="@+id/left_fragment"
 8        android:name="com.example.administrator.fragmenttest.LeftFragment"
 9        android:layout_width="0dp"
10        android:layout_height="match_parent"
11        android:layout_weight="1"
12        />
13     <FrameLayout
14         android:id="@+id/right_layout"
15         android:layout_width="0dp"
16         android:layout_height="match_parent"
17         android:layout_weight="1"
18         >
19     </FrameLayout>
20 </LinearLayout>

运行程序,效果如下:

二、动态添加碎片

1、在前面基础上新建another_right_fragment.xml,代码如下:(布局文件和right_fragment.xml基本相同,仅修改了背景色和显示文字)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:background="#ffff00"
 7     >
 8     <TextView
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_gravity="center_horizontal"
12         android:textSize="20sp"
13         android:text="This is another right fragment"
14         />
15 </LinearLayout>

2、新建AnotherRightFragment类作为另一个右侧碎片,代码如下:

1 public class AnotherRightFragment extends Fragment{
2         @Override
3         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
4             View view=inflater.inflate(R.layout.another_right_fragment,container,false);
5             return view;
6         }
7 }

3、修改activity_main.xml,代码如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     >
 6    <fragment
 7        android:id="@+id/left_fragment"
 8        android:name="com.example.administrator.fragmenttest.LeftFragment"
 9        android:layout_width="0dp"
10        android:layout_height="match_parent"
11        android:layout_weight="1"
12        />
13     <FrameLayout
14         android:id="@+id/right_layout"
15         android:layout_width="0dp"
16         android:layout_height="match_parent"
17         android:layout_weight="1"
18         >
19     </FrameLayout>
20 </LinearLayout>

4、修改MainActivity中的代码:(在代码中向FrameLayout里添加内容)

 1 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_main);
 7         Button button=(Button)findViewById(R.id.button);
 8         button.setOnClickListener(this);
 9         replaceFragment(new RightFragment());
10     }
11 
12     @Override
13     public void onClick(View v){
14         switch(v.getId()){
15             case R.id.button:
16                 replaceFragment(new AnotherRightFragment());
17                 break;
18             default:
19                 break;
20         }
21     }
22 
23     private void replaceFragment(Fragment fragment){
24         FragmentManager fragmentManager=getSupportFragmentManager();
25         FragmentTransaction transaction=fragmentManager.beginTransaction();
26         transaction.replace(R.id.right_layout,fragment);
27         transaction.commit();
28     }
29 }

首先给左侧碎片中的按钮注册一个点击事件,然后调用replaceFrameLayout()方法动态添加RightFragment这个碎片,当点击左侧碎片中的按钮时,又会调用replaceFragment()方法将右侧碎片替换成AnotherRightFragment。

重新运行程序,可以看到和之前一样的界面,然后点击一下按钮,效果如下:

 

posted @ 2017-07-17 16:38 changxiaoqin 阅读(...) 评论(...) 编辑 收藏