zoukankan      html  css  js  c++  java
  • Fragment

    如图是效果图  我在下面定义3个按钮来实现3个fragment的切换(不过写完后发现应该定义成RadioGroup的颜色好改变)通过这3个fragment来看看fragment的生命周期和切换时Fragment都会重新实例化

                                                                               

    1   先看下第一种方法用的是

    FragmentTransaction android.support.v4.app.FragmentTransaction.replace(int containerViewId, Fragment fragment)
    package com.demo.text;
    
    import com.demo.pullrefresh.R;
    
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class MainFragment extends FragmentActivity implements OnClickListener {
        private Button btn_one, btn_two, btn_three;
        private Fragment01 fragment01;
    
        // private int currentIndex;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
    
            Log.d("jiejie", "MainFragment————————————————onCreate");
    
            setContentView(R.layout.mainfragment);
            btn_one = (Button) findViewById(R.id.bb_one);
            btn_two = (Button) findViewById(R.id.bb_two);
            btn_three = (Button) findViewById(R.id.bb_three);
    
            btn_one.setOnClickListener(this);
            btn_two.setOnClickListener(this);
            btn_three.setOnClickListener(this);
            btn_one.setSelected(true);
            
            fragment01 = new Fragment01();
            // 获取fragment管理器
            FragmentManager fmm = getSupportFragmentManager();
            // 打开事务
            FragmentTransaction ftm = fmm.beginTransaction();
            // 把内容显示至帧布局
            ftm.replace(R.id.fl_layout, fragment01);
            // 提交
            ftm.commit();
    
        }
    
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            switch (arg0.getId()) {
            case R.id.bb_one:
                btn_one.setSelected(true);
                btn_two.setSelected(false);
                btn_three.setSelected(false);
                // 创建fragment对象
                // fragment01 = new Fragment01();
                // 获取fragment管理器
                FragmentManager fm = getSupportFragmentManager();
                // 打开事务
                FragmentTransaction ft = fm.beginTransaction();
                // 把内容显示至帧布局
                ft.replace(R.id.fl_layout, fragment01);
                // 提交
                ft.commit();
    
                break;
            case R.id.bb_two:
                btn_one.setSelected(false);
                btn_two.setSelected(true);
                btn_three.setSelected(false);
                // 创建fragment对象
                Fragment02 fragment012 = new Fragment02();
                // 获取fragment管理器
                FragmentManager fm2 = getSupportFragmentManager();
                // 打开事务
                FragmentTransaction ft2 = fm2.beginTransaction();
                // 把内容显示至帧布局
                ft2.replace(R.id.fl_layout, fragment012);
                // 提交
                ft2.commit();
    
                break;
            case R.id.bb_three:
                btn_one.setSelected(false);
                btn_two.setSelected(false);
                btn_three.setSelected(true);
                // 创建fragment对象
                Fragment03 fragment03 = new Fragment03();
                // 获取fragment管理器
                FragmentManager fm3 = getSupportFragmentManager();
                // 打开事务
                FragmentTransaction ft3 = fm3.beginTransaction();
                // 把内容显示至帧布局
                ft3.replace(R.id.fl_layout, fragment03);
                // 提交
                ft3.commit();
    
                break;
    
            default:
                break;
            }
        }
    
        /**
         * 这个方法在活动由不可见变成可见的时候调用
         */
        @Override
        protected void onStart() {
            // TODO Auto-generated method stub
            super.onStart();
            Log.d("jiejie", "MainFragment————————————————onStart");
        }
    
        /**
         * 这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行的状态
         */
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            Log.d("jiejie", "MainFragment————————————————onResume");
        }
    
        /**
         * 这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中
         * 将一些消耗CPU的资源释放掉,以及保存一些关键的数据,但这个方法的执行速度一定要快, 不然会影响到新的栈顶活动的使用。
         */
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
            Log.d("jiejie", "MainFragment————————————————onPause");
        }
    
        /**
         * 这个方法在活动完全不可见的时候调用。它和onPause()方法的主要区别在于,
         * 如果启动的新活动是一个对话框的活动,那么onPause()方法会得到执行,而onStop() 方法并不会执行
         */
        @Override
        protected void onStop() {
            // TODO Auto-generated method stub
            super.onStop();
            Log.d("jiejie", "MainFragment————————————————onStop");
        }
    
        /**
         * 这个方法在活动被销毁之前调用,之后活动的状态将变成销毁状态
         */
        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            Log.d("jiejie", "MainFragment————————————————onDestroy");
        }
    
        /**
         * 这个方法在活动由停止变为运行状态之前调用,也是活动被重新启动了。
         */
        @Override
        protected void onRestart() {
            // TODO Auto-generated method stub
            super.onRestart();
            Log.d("jiejie", "MainFragment————————————————onRestart");
        }
    }
      1 package com.demo.text;
      2 
      3 import com.demo.pullrefresh.R;
      4 
      5 import android.app.Activity;
      6 import android.content.Intent;
      7 import android.os.Bundle;
      8 import android.support.v4.app.Fragment;
      9 import android.util.Log;
     10 import android.view.LayoutInflater;
     11 import android.view.View;
     12 import android.view.ViewGroup;
     13 import android.widget.Button;
     14 import android.widget.Toast;
     15 
     16 public class Fragment01 extends Fragment {
     17     private Button bb_text;
     18 
     19     @Override
     20     public View onCreateView(LayoutInflater inflater, ViewGroup container,
     21             Bundle savedInstanceState) {
     22         // TODO Auto-generated method stub
     23         // return super.onCreateView(R.layout.fragment1, container, false);
     24         Log.d("jiejie", "Fragment01————onCreateView————被调用");
     25         return inflater.inflate(R.layout.fragment1, container, false);
     26         // 第一个是resource ID,指明了当前的Fragment对应的资源文件;
     27         // 第二个参数是父容器控件;
     28         // 第三个布尔值参数表明是否连接该布局和其父容器控件,在这里的情况设置为false,
     29         //因为系统已经插入了这个布局到父控件,设置为true将会产生多余的一个ViewGroup。
     30     }
     31 
     32     // //表示activity执行onCreate方法完成了的时候会调用此方法
     33     @Override
     34     public void onActivityCreated(Bundle savedInstanceState) {
     35         // TODO Auto-generated method stub
     36         super.onActivityCreated(savedInstanceState);
     37         System.out.println("1");
     38         Log.d("jiejie", "Fragment01————onActivityCreated————被调用");
     39         bb_text = (Button) getActivity().findViewById(R.id.bb_text);
     40         bb_text.setOnClickListener(new View.OnClickListener() {
     41 
     42             @Override
     43             public void onClick(View arg0) {
     44                 // TODO Auto-generated method stub
     45                 // startActivity(new Intent(getActivity(), OtherClass.class));
     46                 Toast.makeText(getActivity(), "------", Toast.LENGTH_SHORT)
     47                         .show();
     48             }
     49         });
     50     }
     51 
     52     // 当碎片和活动建立关联的时候调用
     53     @Override
     54     public void onAttach(Activity activity) {
     55         // TODO Auto-generated method stub
     56         super.onAttach(activity);
     57         Log.d("jiejie", "Fragment01————onAttach————被调用");
     58     }
     59 
     60     // 为碎片创建视图(加载布局时调用)
     61     @Override
     62     public void onCreate(Bundle savedInstanceState) {
     63         // TODO Auto-generated method stub
     64         super.onCreate(savedInstanceState);
     65         Log.d("jiejie", "Fragment01————onCreate————被调用");
     66     }
     67 
     68     @Override
     69     public void onStart() {
     70         // TODO Auto-generated method stub
     71         super.onStart();
     72         Log.d("jiejie", "Fragment01————onStart————被调用");
     73     }
     74 
     75     @Override
     76     public void onResume() {
     77         // TODO Auto-generated method stub
     78         super.onResume();
     79         Log.d("jiejie", "Fragment01————onResume————被调用");
     80     }
     81 
     82     @Override
     83     public void onPause() {
     84         // TODO Auto-generated method stub
     85         super.onPause();
     86         Log.d("jiejie", "Fragment01————onPause————被调用");
     87     }
     88 
     89     @Override
     90     public void onStop() {
     91         // TODO Auto-generated method stub
     92         super.onStop();
     93         Log.d("jiejie", "Fragment01————onStop————被调用");
     94     }
     95 
     96     @Override
     97     public void onDestroyView() {
     98         // TODO Auto-generated method stub
     99         super.onDestroyView();
    100         Log.d("jiejie", "Fragment01————onDestroyView————被调用");
    101     }
    102 
    103     @Override
    104     public void onDestroy() {
    105         // TODO Auto-generated method stub
    106         super.onDestroy();
    107         Log.d("jiejie", "Fragment01————onDestroy————被调用");
    108     }
    109 
    110     // 当碎片和活动解除了关联的时候调用
    111     @Override
    112     public void onDetach() {
    113         // TODO Auto-generated method stub
    114         super.onDetach();
    115         Log.d("jiejie", "Fragment01————onDetach————被调用");
    116     }
    117 }

    打印的日志如下

    刚进来时    

    当点击其他的时候也就是切换fragment时

             

    再此返回这个fragment时然后销毁

          

    不过这个方法每次点击切换按钮的时候fragment都会重新实例话这样话会对服务器的请求过多

    2    一般都用第二种方法来实现fragment

    这种方法是从一开始就加载了3个fragment下面的3个按钮只是确定显示哪个和隐藏哪个而已,每次点击不会出现再次实例话

    package com.demo.text;
    
    import com.demo.pullrefresh.R;
    
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class OtherClass extends FragmentActivity implements OnClickListener {
        private Button btn_one, btn_two, btn_three;
        private Fragment01 fragment01;
        private Fragment02 fragment02;
        private Fragment03 fragment03;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mainfragment);
    
            btn_one = (Button) findViewById(R.id.bb_one);
            btn_two = (Button) findViewById(R.id.bb_two);
            btn_three = (Button) findViewById(R.id.bb_three);
    
            btn_one.setOnClickListener(this);
            btn_two.setOnClickListener(this);
            btn_three.setOnClickListener(this);
            btn_one.setSelected(true);
    
            fragment01 = new Fragment01();
            fragment02 = new Fragment02();
            fragment03 = new Fragment03();
    
            // 获取fragment管理器
            FragmentManager fm = getSupportFragmentManager();
            // 打开事务
            FragmentTransaction ft = fm.beginTransaction();
            // 把内容显示至帧布局
            // ft.replace(R.id.fl_timeshopfragment, timeLimitShop);
            ft.add(R.id.fl_layout, fragment01);
            ft.add(R.id.fl_layout, fragment02);
            ft.add(R.id.fl_layout, fragment03);
            ft.show(fragment01).hide(fragment02).hide(fragment03);
            // 提交
            ft.commit();
        }
    
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            switch (arg0.getId()) {
            case R.id.bb_one:
                btn_one.setSelected(true);
                btn_two.setSelected(false);
                btn_three.setSelected(false);
                
                getSupportFragmentManager().beginTransaction().show(fragment01)
                        .hide(fragment02).hide(fragment03).commit();
                break;
            case R.id.bb_two:
                btn_one.setSelected(false);
                btn_two.setSelected(true);
                btn_three.setSelected(false);
                
                getSupportFragmentManager().beginTransaction().show(fragment02)
                        .hide(fragment01).hide(fragment03).commit();
                break;
            case R.id.bb_three:
                btn_one.setSelected(false);
                btn_two.setSelected(false);
                btn_three.setSelected(true);
                
                getSupportFragmentManager().beginTransaction().show(fragment03)
                        .hide(fragment01).hide(fragment02).commit();
                break;
    
            default:
                break;
            }
        }
    
        /**
         * 这个方法在活动由不可见变成可见的时候调用
         */
        @Override
        protected void onStart() {
            // TODO Auto-generated method stub
            super.onStart();
        }
    
        /**
         * 这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行的状态
         */
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
        }
    
        /**
         * 这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中
         * 将一些消耗CPU的资源释放掉,以及保存一些关键的数据,但这个方法的执行速度一定要快, 不然会影响到新的栈顶活动的使用。
         */
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
        }
    
        /**
         * 这个方法在活动完全不可见的时候调用。它和onPause()方法的主要区别在于,
         * 如果启动的新活动是一个对话框的活动,那么onPause()方法会得到执行,而onStop() 方法并不会执行
         */
        @Override
        protected void onStop() {
            // TODO Auto-generated method stub
            super.onStop();
        }
    
        /**
         * 这个方法在活动被销毁之前调用,之后活动的状态将变成销毁状态
         */
        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
        }
    
        /**
         * 这个方法在活动由停止变为运行状态之前调用,也是活动被重新启动了。
         */
        @Override
        protected void onRestart() {
            // TODO Auto-generated method stub
            super.onRestart();
        }
    
    }
    1 <?xml version="1.0" encoding="utf-8"?>
    2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    3 
    4     <item android:state_selected="true" android:color="#f00"></item>
    5     <item android:color="#000"/>
    6 
    7 </selector>
    View Code
  • 相关阅读:
    用户访问集群架构的流程
    HTTP请求方法 HTTP的响应方法
    数据报文
    什么是HTTP? 什么是超文本? 什么是URL?
    HTTP协议原理
    C语言之数据类型③——字符与字符串
    C语言之数据类型②——浮点类型
    C语言之数据类型①——整数类型
    uniapp自定义小程序左上角的图标并且添加自定义事件
    在uniapp中使用iconfont
  • 原文地址:https://www.cnblogs.com/wangfengdange/p/5133920.html
Copyright © 2011-2022 走看看