zoukankan      html  css  js  c++  java
  • 关于Fragment里面嵌套fragment

    今天看到一篇好文章

    https://www.2cto.com/kf/201609/545979.html

    转载过来记录一下,往后需要的时候可以随时查看;

    接下来进入正题:

    动态fragment的使用

    对于动态的使用fragment,就是简单的底部多个按钮,然后多个fragment进行切换,这个应该很简单,平时都在用。

    MainActivity:

    /**
     * 主布局
     * @author Rine
     * @version 1.0, 2015-12-1
     */
    public class MainActivity extends FragmentActivity{    
        MainDB mdata = new MainDB();
         
        /**
         * 定义结束时间
         */
        private long exitTime = 0;
         
        /**
         * 定义FragmentTabHost对象  
         */
        private FragmentTabHost mTabHost;  
           
        /**
         * 定义一个布局  
         */
        private LayoutInflater layoutInflater;  
               
        /**
         * 定义数组来存放Fragment界面  
         */
        private Class fragmentArray[] = mdata.fragmentArray;
           
        /**
         * 定义数组来存放按钮图片  
         */
        private int mImageViewArray[] = mdata.ImageViewArray;  
         
        /**
         * Tab选项卡的文字  
         */
        private String mTextviewArray[] = mdata.TextviewArray;
     
     
     
     @Override
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
    //        CloudOnlyDB dbHelper;
    //        dbHelper = new CloudOnlyDB(MainActivity.this);
    //        HomeData home = new HomeData(MainActivity.this);
            initView( );  
        }  
      
        /** 
         * 初始化组件 
         */ 
        private void initView (){  
            /**
             * 实例化布局对象  
             */
            layoutInflater = LayoutInflater.from(this);  
                       
            /**
             * 实例化TabHost对象,得到TabHost  
             */
            mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);  
            mTabHost.setup(this, getSupportFragmentManager(), R.id.container);     //加载内容
               
            /**
             * 得到fragment的个数  
             */
            int count = fragmentArray.length;     
                       
            for(int i = 0; i < count; i++){    
                TabSpec tabSpec = mTabHost.newTabSpec(mTextviewArray[i]).setIndicator(getTabItemView(i));  //为每一个Tab按钮设置图标、文字和内容  
                mTabHost.addTab(tabSpec, fragmentArray[i], null);    //将Tab按钮添加进Tab选项卡中  
            }  
             
        }  
                       
        /** 
         * 给Tab按钮设置图标和文字 
         */ 
        private View getTabItemView(int index){  
            View view = layoutInflater.inflate(R.layout.main_tab_view, null);  
           
            ImageView imageView = (ImageView) view.findViewById(R.id.imageview);  
            imageView.setImageResource(mImageViewArray[index]);  
            TextView textView = (TextView) view.findViewById(R.id.textview);          
            textView.setText(mTextviewArray[index]);  
            return view;  
        }  
         
        /**
         * 2次退出效果
         */
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                exit();                                        //按返回键,true则退出
                return false;
            }
            return super.onKeyDown(keyCode, event);
        }
         
         
         
        public void exit() {                                         //按返回退出
            if ((System.currentTimeMillis() - exitTime) > 2000) {
                Toast.makeText(getApplicationContext(), "再按一次退出程序",
                        Toast.LENGTH_SHORT).show();
                exitTime = System.currentTimeMillis();
            } else {                                           //退出
                finish();                                  
                System.exit(0);
            }
     
        } 
         
         
    }

    MainAcitivity 中的MainDB

    /**
     * 存放主布局数据
     * @author Rine
     * @version 1.0, 2015-12-1
     */
    public class MainDB {
        /**
         * 定义数组来存放Fragment界面  
         */
        public  Class fragmentArray[] = {one.class,two.class,three.class};  
         /**
          * 定义数组来存放按钮图片  
          */
        public int ImageViewArray[] = {R.drawable.home,R.drawable.ccarticle,
                R.drawable.ccone};  
        /**
         * Tab选项卡的文字  
         */
        public String TextviewArray[] = {"one","twom","three"};
     }

    MainActivity 相应的布局:

    <!--?xml version="1.0" encoding="utf-8"?-->
    <!-- Rine -->
    <!-- 功能:主布局 -->
     
    <linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="https://schemas.android.com/apk/res/android">
     
      <framelayout android:id="@+id/container" android:layout_height="0dp" android:layout_weight="1" android:layout_width="fill_parent">
     
       
     
        <framelayout android:id="@android:id/tabcontent" android:layout_height="0dp" android:layout_weight="0" android:layout_width="0dp">            
      </framelayout></android.support.v4.app.fragmenttabhost>
     
    </framelayout></linearlayout>

    相应的style:

    <style name="homework_tab_item" type="text/css"><item name="android:layout_width">0dp</item>
            <item name="android:layout_height">wrap_content</item>
            <item name="android:layout_weight">1</item>
            <item name="android:button">@null</item>
            <item name="android:gravity">center</item>
            <item name="android:textColor">@color/homework_tab_item_text_color</item></style>

    相应的 color:

    <!--?xml version="1.0" encoding="utf-8"?-->
    <selector xmlns:android="https://schemas.android.com/apk/res/android">
     
        <item android:color="#000000" android:state_checked="true">
        <item android:color="#757575">
     
    </item></item></selector>

    fragment嵌套fragment

    这就是简单动态fragment的应该。这也是其中的一种方法。

    然后就是在其fragment中再嵌套多个fragment,我采用的是利用单选按钮来实现,当然单选按钮外面还要包一层RadioGroup。

    Activity:

    /**
     * fragment嵌套fragment
     * @author Rine
     * @version 1.0, 2015-12-1
     */
    public class two extends  Fragment  implements OnClickListener  
    {
        /**
         * 定义一个布局  
         */
        private LayoutInflater inflater; 
    //  private View rootView;// 缓存Fragment view
        private Context mainActivity;
        private TwoToOne twoToOne;
        private TwoToTwo twoToTwo;
        /**
         * one、two RadioGroup 控件
         */
        private RadioGroup twoGroup;
        protected RadioButton twoOne, twoTwo;
         
        /**
         * 加载页面
         */
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {  
            super.onActivityCreated(savedInstanceState); 
            mainActivity = getActivity();
            inflater = LayoutInflater.from(getActivity());
    //      初始化控件和声明事件  
    //        rootView = inflater.inflate(R.layout.two, null);
            twoGroup = (RadioGroup) getActivity().findViewById(R.id.two_group);
            twoOne = (RadioButton) getActivity().findViewById(R.id.two_one);
            twoTwo = (RadioButton) getActivity().findViewById(R.id.two_two);
            //控件颜色
            twoOne.setTextColor(getResources().getColor(R.color.red));
            twoTwo.setTextColor(getResources().getColor(R.color.black));
            twoOne.setOnClickListener(this);  
            twoTwo.setOnClickListener(this);  
              
            setDefaultFragment();  
        }
        /**
         * 设置默认的Fragment
         */
         private void setDefaultFragment()  
            {  
                FragmentManager fm = getFragmentManager();  
                FragmentTransaction transaction = fm.beginTransaction();  
                twoToOne = new TwoToOne();
                transaction.add(R.id.framelayout, twoToOne).commit();
            }  
         
        @Override
        public void onClick(View v) {
            FragmentManager fm = getFragmentManager();  
            // 开启Fragment事务  
            FragmentTransaction transaction = fm.beginTransaction();  
       
            switch (v.getId())  
            {  
            case R.id.two_one:  
                if (twoToOne == null)  
                {  
                    twoToOne = new TwoToOne();  
                }  
                // 使用当前Fragment的布局替代id_content的控件  
                transaction.replace(R.id.framelayout, twoToOne);  
              //控件颜色
                twoOne.setTextColor(getResources().getColor(R.color.red));
                twoTwo.setTextColor(getResources().getColor(R.color.black));
                break;  
            case R.id.two_two:  
                if (twoToTwo == null)  
                {  
                    twoToTwo = new TwoToTwo();  
                }  
                transaction.replace(R.id.framelayout, twoToTwo); 
              //控件颜色
                twoOne.setTextColor(getResources().getColor(R.color.black));
                twoTwo.setTextColor(getResources().getColor(R.color.red));
                break;  
            }  
            // transaction.addToBackStack();  
            // 事务提交  
            transaction.commit();  
        }  
         
         
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            return inflater.inflate(R.layout.two, null);
     
        }
     
         
    }

    其对应的布局:

    <!--?xml version="1.0" encoding="utf-8"?-->
    <linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android="https://schemas.android.com/apk/res/android">
        <relativelayout android:background="@color/white" android:layout_height="@dimen/height_title" android:layout_width="match_parent">
           <linearlayout android:id="@+id/layout_brck" android:layout_height="match_parent" android:layout_marginleft="@dimen/margin_15dp" android:layout_width="wrap_content" android:orientation="horizontal">
     
            </linearlayout>
            <radiogroup android:gravity="center" android:id="@+id/two_group" android:layout_centerinparent="true" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal">
     
                <radiobutton android:background="@null" android:checked="true" android:id="@+id/two_one" android:layout_marginright="@dimen/margin_20dp" android:text="one" android:textcolor="@color/black" android:textsize="@dimen/title_textsize_22sp" style="@style/homework_tab_item">
     
                <radiobutton android:background="@null" android:id="@+id/two_two" android:layout_margin="5dp" android:layout_marginleft="@dimen/margin_20dp" android:text="two" android:textcolor="@color/black" android:textsize="@dimen/title_textsize_22sp" style="@style/homework_tab_item">
            </radiobutton></radiobutton></radiogroup>
     
     
            <view android:background="@color/br_title_color" android:layout_alignparentbottom="true" android:layout_height="0.1dp" android:layout_width="match_parent">
        </view></relativelayout>
     
        <framelayout android:id="@+id/framelayout" android:layout_height="0dp" android:layout_weight="1" android:layout_width="match_parent">
        </framelayout>
     
    </linearlayout>

    OK。大体就是这样了。示例图如下:

  • 相关阅读:
    数据结构 队列
    数据结构 堆栈
    UNP学习 广播
    UNP学习 路由套接口
    QTcpSocket发送结构体
    线性表及实现
    [转]理解WSRF之一 使用WS-ResourceProperties (整理自IBM网站)
    详解x86、IA-32、IA-64等CPU系列
    gsoap框架下的onvif程序流程分析
    【LeetCode】从contest-21开始。(一般是10个contest写一篇文章)
  • 原文地址:https://www.cnblogs.com/tomatoSir/p/10774277.html
Copyright © 2011-2022 走看看