android之fragment的使用

android中的fragment与html中的div很类似,下图中通过左边的按键可以控制右边的显示内容。右边的内容就是一个fragment,通过点击按键来控制fragment的实现。

工程目录


需要定义三个fragment类,每个类中显示不同的内容,每个fragment对应一个布局文件。将来的fragment会用布局文件来填充,填充好的fragment会被放到framelayout中显示

布局文件


在主布局文件定义按钮和帧布局

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

    <LinearLayout
        android:id="@+id/left"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="f1"
            android:onClick="click1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="f2"
            android:onClick="click2"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="f3"
            android:onClick="click3"/>
    </LinearLayout>
    <FrameLayout
        android:id="@+id/fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>
</LinearLayout>

帧布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff0000">

</LinearLayout>

Fragment1类


fragment1类需要继承Fragment,这里注意是adroind类库中的fragment,而不是adroind支持类库中fragment类。

package xidian.dy.com.chujia;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by dy on 2016/8/25.
 */
public class Fragment1 extends Fragment{
    
    @Nullable
    @Override
    //加载我们的帧布局文件,将要显示的内容来填充fragment
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        
        View v = inflater.inflate(R.layout.fragment1, null);
        return v;
    }
}

Activity


在Activity中定义帧布局,当点击事件发生的时候切换帧

package xidian.dy.com.chujia;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;


public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void click1(View v){
        Fragment1 f1 = new Fragment1();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft =  fm.beginTransaction();
        ft.replace(R.id.fragment, f1);
        ft.commit();
    }

    public void click2(View v){
        Fragment2 f2 = new Fragment2();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft =  fm.beginTransaction();
        ft.replace(R.id.fragment, f2);
        ft.commit();
    }

    public void click3(View v){
        Fragment3 f3 = new Fragment3();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft =  fm.beginTransaction();
        ft.replace(R.id.fragment, f3);
        ft.commit();
    }
}

   显示一个fragment的过程和数据库的事务很类似,首先需要通过FragmentManager来开启一个事务,然后通过replace方法来进行绑定。replace的第一参数的framelayout的ID,第二个参数是具体的fragment,最后进行事务的提交。

原文地址:https://www.cnblogs.com/xidongyu/p/5808573.html