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
  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/wangfengdange/p/5133920.html
Copyright © 2011-2022 走看看