第六课 Fragment

上一课中,用viewPager来实现页面的滑动,但是我们发现很多代码都集中在MainActivity.java中。每次启动都要初始化很多控件。而且针对不同页面修改代码容易造成失误。所以使用fragment来进一步优化

fragment也像activity一样有生命周期,但是不能单独存在。

添加fragment

共同点

  1. 创建fragment1.xml
  2. 创建fragment1.java 继承自Fragment,重写函数返回fragment1.xml
  3. MainActivity 要继承自 FragmentActivity (v4包)

不同点

  1. 静态添加不需要java代码,动态添加需要
  2. 静态添加是在主界面的xml中添加fragment控件,动态添加是添加fragmentlayout控件

代码

<?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" >

    <Button android:id="@+id/frag_btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点我点我"/>

    <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="FFF"/>

</LinearLayout>

方法一

在xml中添加

代码

步骤

  1. 添加1个布局文件,如fragment1.xml
  2. 添加1个MyFragment.java,重写函数返回fragment1.xml
  3. 在activity.xml中添加fragment1.xml

xml代码

<fragment android:id="@+id/fragment_title" <!-- -->
    android:name="com.example.fragment.MyFragment"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent" />

总结

静态添加fragment是在xml中直接添加,不需要java代码

方法二

在代码中添加

代码

java代码

// MyFragment.java 这个将返回一个view对象
public class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        return inflater.inflate(R.layout.fragment1, container, false);
    }
}

// MainActivity.java
public class MainActivity extends FragmentActivity {

    private Button btn1, fbtn1;
    private TextView tv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 记住下面这一块代码
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        MyFragment mf1 = new MyFragment();
        // activity_main.xml中有一个组件FrameLayout且id为fram1
        fragmentTransaction.add(R.id.fram1, mf1);
        fragmentTransaction.commit();

        btn1 = (Button) findViewById(R.id.btn1);

        btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                tv1 = (TextView) findViewById(R.id.tv1);
                tv1.setText("Changed By BTN1 IN MainAcitivy");
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

xml代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">

    <Button  android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="BTN1"/>

    <FrameLayout android:id="@+id/fram1" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFF00" ></FrameLayout>
</LinearLayout>

总结

动态添加就是需要以个fragment.java继承自Fragment,重写函数返回一个view,这个view就是新建的一个fragment.xml。然后通过java代码添加到页面中

你可能感兴趣的:(第六课 Fragment)