android 学习随笔二十三(动画:Fragment )
- Fragment
* 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容
* 在一个Activity中切换多个界面,每个界面就是一个Fragment
* Fragmnent的内容也是一个View对象
* 生命周期方法跟Activity一致,可以理解把其为就是一个Activity
* fragment切换时会销毁旧的,再创建新的
* 定义布局文件作为Fragment的显示内容
//此方法返回的View就会被显示在Fragment上
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
//用布局文件填充成一个View对象,返回出去,那么就显示在Fragment上了
View v = inflater.inflate(R.layout.fragment01, null);
return v;
}
* 把Fragment显示至指定ViewGroup中
//把fragment显示至界面
//new出fragment对象
Fragment01 fg = new Fragment01();
FragmentManager fm = getFragmentManager();
//开启事务
FragmentTransaction ft = fm.beginTransaction();
//把fragment对象显示到指定资源id的组件里面
ft.replace(R.id.fl, fg);
ft.commit();
package com.itheima.fragment; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showfagment01(); } private void showfagment01() { //1.创建fragment对象 Fragment01 fragment1 = new Fragment01(); //2.获取fragment管理器 FragmentManager fm = getFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment1); //5.提交 ft.commit(); } public void click1(View v){ showfagment01(); } public void click2(View v){ //1.创建fragment对象 Fragment02 fragment2 = new Fragment02(); //2.获取fragment管理器 FragmentManager fm = getFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment2); //5.提交 ft.commit(); } public void click3(View v){ //1.创建fragment对象 Fragment03 fragment3 = new Fragment03(); //2.获取fragment管理器 FragmentManager fm = getFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment3); //5.提交 ft.commit(); } }
package com.itheima.fragment; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment01 extends Fragment { //系统自动调用,返回的View对象作为Fragment的内容显示 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment01, null); return v; } }
package com.itheima.fragment; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment02 extends Fragment { //系统自动调用,返回的View对象作为Fragment的内容显示 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment02, null); return v; } }
package com.itheima.fragment; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment03 extends Fragment { //系统自动调用,返回的View对象作为Fragment的内容显示 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment03, null); return v; } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima.fragment" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itheima.fragment.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
<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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="horizontal" > <FrameLayout android:id="@+id/fl" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" ></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:text="界面1" android:onClick="click1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="界面2" android:onClick="click2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="界面3" android:onClick="click3" /> </LinearLayout> </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:textSize="30sp" android:text="这是plus的帽子的绿色" /> </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="#ff0000" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:text="这是热情的红色" /> </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="#0000ff" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:text="这是plus戴上帽子的心情的蓝色" /> </LinearLayout>
- 生命周期
* fragment切换时旧fragment对象会销毁,新的fragment对象会被创建
- 低版本兼容
* 在support-v4.jar包中有相关api,也就是说fragment可以在低版本模拟器运行
package com.itheima.fragment; import android.os.Bundle; import android.annotation.SuppressLint; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.Menu; import android.view.View; public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showfagment01(); } private void showfagment01() { //1.创建fragment对象 Fragment01 fragment1 = new Fragment01(); //2.获取fragment管理器 FragmentManager fm = getSupportFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment1); //5.提交 ft.commit(); } public void click1(View v){ showfagment01(); } public void click2(View v){ //1.创建fragment对象 Fragment02 fragment2 = new Fragment02(); //2.获取fragment管理器 FragmentManager fm = getSupportFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment2); //5.提交 ft.commit(); } public void click3(View v){ //1.创建fragment对象 Fragment03 fragment3 = new Fragment03(); //2.获取fragment管理器 FragmentManager fm = getSupportFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment3); //5.提交 ft.commit(); } }
package com.itheima.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment01 extends Fragment { //系统自动调用,返回的View对象作为Fragment的内容显示 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment01, null); return v; } }
- Fragment和Activity传递数据
package com.itheima.transmit; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { private Fragment01 fragment1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showfagment01(); } private void showfagment01() { //1.创建fragment对象 fragment1 = new Fragment01(); //2.获取fragment管理器 FragmentManager fm = getFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment1); //5.提交 ft.commit(); } public void click1(View v){ showfagment01(); } public void click2(View v){ //1.创建fragment对象 Fragment02 fragment2 = new Fragment02(); //2.获取fragment管理器 FragmentManager fm = getFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment2); //5.提交 ft.commit(); } public void click3(View v){ //1.创建fragment对象 Fragment03 fragment3 = new Fragment03(); //2.获取fragment管理器 FragmentManager fm = getFragmentManager(); //3.开启事务 FragmentTransaction ft = fm.beginTransaction(); //4.显示fragment //arg0:设置把fragment显示在哪个容器中 ft.replace(R.id.fl, fragment3); //5.提交 ft.commit(); } public void click4(View v){ EditText et_main = (EditText) findViewById(R.id.et_main); String text = et_main.getText().toString(); fragment1.setText(text); } public void setText(String text){ TextView tv_main = (TextView) findViewById(R.id.tv_main); tv_main.setText(text); } }
package com.itheima.transmit; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView.FindListener; import android.widget.TextView; public class Fragment01 extends Fragment { private TextView tv; //系统自动调用,返回的View对象作为Fragment的内容显示 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment01, null); tv = (TextView) v.findViewById(R.id.tv_fragment1); return v; } public void setText(String text){ tv.setText(text); } }
package com.itheima.transmit; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; public class Fragment03 extends Fragment implements OnClickListener { private EditText et; //系统自动调用,返回的View对象作为Fragment的内容显示 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment03, null); Button bt_fragment03 = (Button) v.findViewById(R.id.bt_fragment03); et = (EditText) v.findViewById(R.id.et_fragment03); bt_fragment03.setOnClickListener(this); return v; } @Override public void onClick(View v) { String text = et.getText().toString(); ((MainActivity)getActivity()).setText(text); } }
<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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="horizontal" > <FrameLayout android:id="@+id/fl" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" ></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:text="界面1" android:onClick="click1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="界面2" android:onClick="click2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="界面3" 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" /> <TextView android:id="@+id/tv_main" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </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:textSize="30sp" android:text="这是plus的帽子的绿色" /> <TextView android:id="@+id/tv_fragment1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </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="#0000ff" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:text="这是plus戴上帽子的心情的蓝色" /> <EditText android:id="@+id/et_fragment03" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/bt_fragment03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交" /> </LinearLayout>