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();
    }
    
    
}
MainActivity
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;
    }
}
Fragment01
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;
    }
}
Fragment02
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;
    }
}
Fragment03
<?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>
AndroidManifest
<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>
activity_main
<?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>
fragment01
<?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>
fragment02
<?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>
fragment03
  • 生命周期

* 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();
    }
    
    
}
View Code
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;
    }
}
Fragment01
  • 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);
    }
    
}
MainActivity
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);
    }
}
Fragment01
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);
    }
    
    
}
Fragment03
<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>
activity_main
<?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>
fragment01
<?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>
fragment03

 

原文地址:https://www.cnblogs.com/ecollab/p/5968421.html