• 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

     

  • 相关阅读:
    BZOJ3674:可持久化并查集加强版
    BZOJ3772:精神污染
    BZOJ3932:[CQOI2015]任务查询系统
    BZOJ3123:[SDOI2013]森林
    BZOJ1926:[SDOI2010]粟粟的书架
    029 列表类型内置方法
    02 Python爬虫之盗亦有道
    01 Python爬虫之Requests库入门
    028 字符串类型内置方法
    027 数字类型内置方法
  • 原文地址:https://www.cnblogs.com/ecollab/p/5968421.html
Copyright © 2020-2023  润新知