标签:
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