Fragment:Fragment是一种可以嵌入到Ui中的片段,他能让程序更加合理和充分地利用大屏幕空间,并且在平板上应用的非常广泛
下面介绍一个简单的Fragment的实现,并且实现在Fragment和Activity中的数据传递,在写代码前先看一下实现的效果
演示效果1:通过点击不同的按钮切换到不同的Fragment
演示效果2:Activity中发送数据到Fragment
演示效果3:Fragment发送数据到Activity
实现方式:
第一步:使用Android Studio创建一个Android工程,修改activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context="com.fyt.fragment.MainActivity"
    android:orientation="horizontal">
    <FrameLayout
        android:id="@+id/fl"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1">
    </FrameLayout>
    <LinearLayout
        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:textAllCaps="false"
            android:text="fragment01"
            android:onClick="click1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="fragment02"
            android:onClick="click2"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="fragment03"
            android:onClick="click3"/>
        <EditText
            android:id="@+id/et_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="传递数据"
            android:onClick="click4"/>
    </LinearLayout>
</LinearLayout>
第二步:在布局文件夹中新建一个fragment01.xml文件,并且在fragment01.xml中添加下面的代码
<?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"
    android:background="#ff0000">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="热情的红色"
        android:textSize="20sp"/>
    <EditText
        android:id="@+id/fg_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/fg_bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送数据"/>
</LinearLayout>
第三步:在布局文件夹中新建一个fragment02.xml文件,并且在fragment02.xml中添加下面的代码
<?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"
    android:background="#0000ff">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="忧桑的蓝色"
        android:textSize="20sp"/>
</LinearLayout><?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"
    android:background="#00ff00">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小志的绿色"
        android:textSize="20sp"/>
    <TextView
        android:id="@+id/fg_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"/>
</LinearLayout>package com.fyt.fragment;
import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
public class Fragment01 extends Fragment {
    EditText fg_et;
    //返回view对象会作为fragment01的内容显示在屏幕上
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //将Fragment01的布局文件填充成一个View对象
        View v = inflater.inflate(R.layout.fragment01, null);
        //获得布局文件上的EditText控件
        fg_et = (EditText) v.findViewById(R.id.fg_et);
        //获得布局文件上的按钮
        Button button = (Button) v.findViewById(R.id.fg_bt);
        //为按钮添加一个事件监听
        button.setOnClickListener(new View.OnClickListener() {
            //发送数据按钮响应函数
            @Override
            public void onClick(View v) {
                String text = fg_et.getText().toString();
                ((MainActivity)getActivity()).setText(text);
            }
        });
        return v;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("MainActivity", "Fragment01的onCreate");
    }
    @Override
    public void onStart() {
        super.onStart();
        Log.d("MainActivity", "Fragment01的onStart");
    }
    @Override
    public void onResume() {
        super.onResume();
        Log.d("MainActivity", "Fragment01的onResume");
    }
    @Override
    public void onPause() {
        super.onPause();
        Log.d("MainActivity", "Fragment01的onPause");
    }
    @Override
    public void onStop() {
        super.onStop();
        Log.d("MainActivity", "Fragment01的onStop");
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity", "Fragment01的onDestroy");
    }
}package com.fyt.fragment;
import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment02 extends Fragment {
    //返回view对象会作为fragment01的内容显示在屏幕上
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment02, null);
        return v;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("MainActivity", "Fragment01的onCreate");
    }
    @Override
    public void onStart() {
        super.onStart();
        Log.d("MainActivity", "Fragment02的onStart");
    }
    @Override
    public void onResume() {
        super.onResume();
        Log.d("MainActivity", "Fragment02的onResume");
    }
    @Override
    public void onPause() {
        super.onPause();
        Log.d("MainActivity", "Fragment02的onPause");
    }
    @Override
    public void onStop() {
        super.onStop();
        Log.d("MainActivity", "Fragment02的onStop");
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity", "Fragment02的onDestroy");
    }
}package com.fyt.fragment;
import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class Fragment03 extends Fragment {
    TextView fg_tv;
    //返回view对象会作为fragment01的内容显示在屏幕上
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //使用填充器将Fragment的布局文件填充成View对象
        View v = inflater.inflate(R.layout.fragment03, null);
        //获得布局文件上的TextView控件
        fg_tv = (TextView) v.findViewById(R.id.fg_tv);
        return v;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("MainActivity", "Fragment03的onCreate");
    }
    @Override
    public void onStart() {
        super.onStart();
        Log.d("MainActivity", "Fragment03的onStart");
    }
    @Override
    public void onResume() {
        super.onResume();
        Log.d("MainActivity", "Fragment03的onResume");
    }
    @Override
    public void onPause() {
        super.onPause();
        Log.d("MainActivity", "Fragment03的onPause");
    }
    @Override
    public void onStop() {
        super.onStop();
        Log.d("MainActivity", "Fragment03的onStop");
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity", "Fragment03的onDestroy");
    }
    //接收从MainActivity中发送过来的数据
    public void getText(String text) {
        //将从MainActivity中发送过来的数据在Fragment03中显示
        fg_tv.setText(text);
    }
}package com.fyt.fragment;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
    private Fragment03 fg3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("MainActivity", "Activity的onCreate");
        //创建Fragment03对象
        fg3 = new Fragment03();
        //获取fragment管理器
        FragmentManager fm = getFragmentManager();
        //打开事务
        FragmentTransaction ft = fm.beginTransaction();
        //把内容显示至帧布局
        ft.replace(R.id.fl, fg3);
        //提交
        ft.commit();
    }
    public void click1(View view) {
        //创建fragment0对象
        Fragment01 fg1 = new Fragment01();
        //获取fragment管理器
        FragmentManager fm = getFragmentManager();
        //打开事务
        FragmentTransaction ft = fm.beginTransaction();
        //把内容显示至帧布局
        ft.replace(R.id.fl, fg1);
        //提交
        ft.commit();
    }
    public void click2(View view) {
        //创建fragment对象
        Fragment02 fg2 = new Fragment02();
        //获取fragment管理器
        FragmentManager fm = getFragmentManager();
        //打开事务
        FragmentTransaction ft = fm.beginTransaction();
        //把内容显示至帧布局
        ft.replace(R.id.fl, fg2);
        //提交
        ft.commit();
    }
    public void click3(View view) {
        //获取fragment管理器
        FragmentManager fm = getFragmentManager();
        //打开事务
        FragmentTransaction ft = fm.beginTransaction();
        //把内容显示至帧布局
        ft.replace(R.id.fl, fg3);
        //提交
        ft.commit();
    }
    //传递数据按钮响应函数
    public void click4(View view) {
        //获取布局文件上的EditText控件
        EditText et_main = (EditText) findViewById(R.id.et_main);
        //获得EditText中的数据
        String text = et_main.getText().toString();
        //将EditText中的数据发送到Fragment
        sendData(text);
    }
    //发送数据到Fragment
    public void sendData(String text) {
        fg3.getText(text);
    }
    //接收从Fragment中发送过来的数据
    public void setText(String text) {
        EditText editText = (EditText) findViewById(R.id.et_main);
        editText.setText(text);
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d("MainActivity", "Activity的onStart");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d("MainActivity", "Activity的onResume");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.d("MainActivity", "Activity的onPause");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.d("MainActivity", "Activity的onStop");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity", "Activity的onDestroy");
    }
}原文:http://blog.csdn.net/u010105970/article/details/51333346