zoukankan      html  css  js  c++  java
  • Android学习笔记--Fragment控件

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961

    自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~

    本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务;以及Fragment的一些特殊用途,例如:没有布局的Fragment有何用处?Fragment如何与Activity交互?Fragment如何创建对话框?Fragment如何与ActionBar集成等等。

    1、Fragment的产生与介绍

    Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。

    贴出代码

    先贴出两个Fragment文件的代码

    ShouYe.java

     1 package com.wuxianedu.mimixun;
     2 
     3 import android.support.v4.app.Fragment;
     4 import android.support.annotation.Nullable;
     5 import android.os.Bundle;
     6 import android.view.LayoutInflater;
     7 import android.view.View;
     8 import android.view.ViewGroup;
     9 //继承Fragment类
    10 public class ShouYe extends Fragment {
    11     /**
    12      * 继承Fragment类需要重写两个方法
    13      * 第一个onCreateView方法---返回布局
    14      * 第二个onViewCreated---绑定控件
    15      * @param inflater
    16      * @param container
    17      * @param savedInstanceState
    18      * @return
    19      */
    20     @Nullable
    21     @Override
    22     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    23         View view = inflater.inflate(R.layout.activity_shou_ye, null);
    24         return view;
    25     }
    26 
    27     @Override
    28     public void onViewCreated(View view, Bundle savedInstanceState) {
    29         super.onViewCreated(view, savedInstanceState);
    30     }
    31 }

    Gm.java

     1 package com.wuxianedu.mimixun;
     2 
     3 import android.support.v4.app.Fragment;
     4 import android.support.annotation.Nullable;
     5 import android.os.Bundle;
     6 import android.view.LayoutInflater;
     7 import android.view.View;
     8 import android.view.ViewGroup;
     9 
    10 public class Gm extends Fragment {
    11 
    12     @Nullable
    13     @Override
    14     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    15         View view = inflater.inflate(R.layout.activity_gm, null);
    16         return view;
    17     }
    18     @Override
    19     public void onViewCreated(View view, Bundle savedInstanceState) {
    20         super.onViewCreated(view, savedInstanceState);
    21     }
    22 }

    MainActivity.java

     1 package com.wuxianedu.mimixun;
     2 
     3 import android.support.v4.app.Fragment;
     4 import android.support.v4.app.FragmentManager;
     5 import android.support.v4.app.FragmentPagerAdapter;
     6 import android.support.v4.view.ViewPager;
     7 import android.support.v7.app.AppCompatActivity;
     8 import android.os.Bundle;
     9 import android.view.View;
    10 import android.widget.RadioButton;
    11 
    12 public class BaseActivity extends AppCompatActivity implements View.OnClickListener {
    13     //new一个fragment数组,有几个就new几个
    14     private Fragment[] fragment = new Fragment[2];
    15     //new一个RadioButton数组,
    16     private RadioButton [] radioButtons =new RadioButton[2];
    17     //滑动组件
    18     private ViewPager viewpager;
    19     @Override
    20     protected void onCreate(Bundle savedInstanceState) {
    21         super.onCreate(savedInstanceState);
    22         setContentView(R.layout.activity_base);
    23         Initialize();
    24     }
    25     private void Initialize(){
    26         /**
    27          * 让fragment[0]的页面为new ShouYe();
    28          * 让fragment[1]的页面为 new Gm();
    29          */
    30         fragment[0] = new ShouYe();
    31         fragment[1] = new Gm();
    32         //初始化viewpager
    33         viewpager = (ViewPager) findViewById(R.id.fl_id);
    34        // Fragment填充数据
    35         MyPagerAdapter myPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
    36        //Fragment填充数据
    37         viewpager.setAdapter(myPagerAdapter);
    38         radioButtons[0] = (RadioButton) findViewById(R.id.rb_weixin);
    39         radioButtons[1] = (RadioButton) findViewById(R.id.rb_tongxunlu);
    40 
    41         radioButtons[0].setOnClickListener(this);
    42         radioButtons[1].setOnClickListener(this);
    43         //viewpager的滑动事件
    44         viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    45             @Override
    46             public void onPageSelected(int arg0) {
    47                 radioButtons[arg0].setChecked(true);
    48             }
    49             @Override
    50             public void onPageScrolled(int arg0, float arg1, int arg2) {
    51             }
    52             @Override
    53             public void onPageScrollStateChanged(int arg0) {
    54             }
    55         });
    56     }
    57 
    58     @Override
    59     public void onClick(View v) {
    60         switch (v.getId()) {
    61             case R.id.rb_weixin://微信
    62                 //跳转第一个界面
    63                 viewpager.setCurrentItem(0,false);
    64                 break;
    65             case R.id.rb_tongxunlu://通讯录
    66                 //跳转第二个界面
    67                 viewpager.setCurrentItem(1,false);
    68                 
    69                 break;
    70             default:
    71                 break;
    72         }
    73     }
    74 
    75     /**
    76      * Fragment填充数据
    77      */
    78     class MyPagerAdapter extends FragmentPagerAdapter {
    79 
    80         public MyPagerAdapter(FragmentManager fm) {
    81             super(fm);
    82             // TODO Auto-generated constructor stub
    83         }
    84 
    85         @Override
    86         public android.support.v4.app.Fragment getItem(int arg0) {
    87             // TODO Auto-generated method stub
    88             return fragment[arg0];
    89         }
    90 
    91         @Override
    92         public int getCount() {
    93             // TODO Auto-generated method stub
    94             return fragment.length;
    95         }
    96 
    97     }
    98 
    99 }

    这里要说到一下,使用Fragment要new一个内部类,如下

    75     /**
    76      * Fragment填充数据
    77      */
    78     class MyPagerAdapter extends FragmentPagerAdapter {
    79 
    80         public MyPagerAdapter(FragmentManager fm) {
    81             super(fm);
    82             // TODO Auto-generated constructor stub
    83         }
    84 
    85         @Override
    86         public android.support.v4.app.Fragment getItem(int arg0) {
    87             // TODO Auto-generated method stub
    88             return fragment[arg0];
    89         }
    90 
    91         @Override
    92         public int getCount() {
    93             // TODO Auto-generated method stub
    94             return fragment.length;
    95         }
    96 
    97     }
    98 
    99 }

    好了,代码都贴出来了,代码里面已经写了注释,大家看一下就可以看懂

  • 相关阅读:
    黑盒测试分类
    Java变量的初始化顺序
    javahttp请求四种方式
    mybatis sql查询慢
    jacoco搭配springMVC maven tomcat项目,单元测试&接口测试踩坑
    maven标签pluginManagement和plugins区别
    Java反射学习之Field类访问和修饰变量
    Classpath重新认识
    properties文件加载的六种方法
    VMware ESXI6.0安装和配置IP地址
  • 原文地址:https://www.cnblogs.com/langfei8818/p/5943497.html
Copyright © 2011-2022 走看看