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