• Android Fragment和FragmentActivity区别和用法


    Android Fragment是Android4.0以上才有的;而FragmentActivity是为了兼容4.0以下版本的Fragment使用的。

    所以如果你想兼容4.0以下Android版本使用Fragment的话,框架Activity需要继承FragmentActivity,FragmentActivity这个类是在android.support.v4.app.FragmentActivity里的。

    下面介绍2种用法:

    1、继承Activity的。

    (这个只针对4.0以上的Android平台使用Fragment)。

    框架Activity:

    package com.tandong.fragment;

    import android.app.Activity;
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.app.FragmentTransaction;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;

    /**
     * 不兼容4.0以下模式Fragment
     * 
     * @author tandong
     * 
     */

    public class Mt_Activity extends Activity implements OnClickListener {
        private Button btn_first, btn_second;
        private Fragment Fragment_first, Fragment_Second;
        private FragmentTransaction fragmentTransaction;
        private FragmentManager fragmentManager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment);
            initView();

            Fragment_Second = new Fragment_Second();
            fragmentManager = this.getFragmentManager();
            fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.main_fragment_layout, Fragment_Second,"second_Fragment");
            fragmentTransaction.commit();
        }

        private void initView() {
            btn_first = (Button) this.findViewById(R.id.btn_first);
            btn_second = (Button) this.findViewById(R.id.btn_second);
            btn_first.setOnClickListener(this);
            btn_second.setOnClickListener(this);
        }

        @Override
        public void onClick(View arg0) {
            switch (arg0.getId()) {
            case R.id.btn_first:
                // 加载不同的Fragment
                if (null == Fragment_first) {
                    Fragment_first = new Fragment_first();
                }
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.main_fragment_layout, Fragment_first, "fist_Fragment");
                fragmentTransaction.commit();
                break;
            case R.id.btn_second:
                if (null == Fragment_first) {
                    Fragment_Second = new Fragment_Second();
                }
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.main_fragment_layout, Fragment_Second, "second_Fragment");
                fragmentTransaction.commit();
                break;
            default:
                break;
            }

        }

    }

    Fragment代码:

    package com.tandong.fragment;

    import android.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    public class Fragment_Second extends Fragment {
        private View rootView;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            if(container==null)
               return null;
            rootView = inflater.inflate(R.layout.fragment_two, container,false);

            return rootView;
        }
    }

    2.继承FragmentActivity的(向下兼容4.0以下版本使用Fragment,导入的是android.support.v4包里的内容)

    框架Activity:

    package com.tandong.fragment;

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    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;

    /**
     * 兼容4.0以下模式Fragment
     * 
     * @author tandong
     * 
     */

    public class Mt_Activity extends FragmentActivity implements OnClickListener {
        private Button btn_first, btn_second;
        private Fragment Fragment_first, Fragment_Second;
        private FragmentTransaction fragmentTransaction;
        private FragmentManager fragmentManager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment);
            initView();

            Fragment_first = new Fragment_first();
            fragmentManager = this.getSupportFragmentManager();
            fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.main_fragment_layout, Fragment_first,"first_Fragment");
            fragmentTransaction.commit();
        }

        private void initView() {
            btn_first = (Button) this.findViewById(R.id.btn_first);
            btn_second = (Button) this.findViewById(R.id.btn_second);
            btn_first.setOnClickListener(this);
            btn_second.setOnClickListener(this);
        }

        @Override
        public void onClick(View arg0) {
            switch (arg0.getId()) {
            case R.id.btn_first:
                // 加载不同的Fragment
                if (null == Fragment_first) {
                    Fragment_first = new Fragment_first();
                }
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.main_fragment_layout, Fragment_first, "fist_Fragment");
                fragmentTransaction.commit();
                break;
            case R.id.btn_second:
                if (null == Fragment_first) {
                    Fragment_Second = new Fragment_Second();
                }
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.main_fragment_layout, Fragment_Second, "second_Fragment");
                fragmentTransaction.commit();
                break;
            default:
                break;
            }

        }

    }

    Fragment代码:

    package com.tandong.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 Fragment_first extends Fragment {
        private View rootView;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            if(container==null)
               return null;
            rootView = inflater.inflate(R.layout.fragment_first, container,false);

            return rootView;
        }
    }

    最后再说一句布局:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:id="@+id/top_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btn_one"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/top_bar_bg"
                android:text="按钮一" />

            <Button
                android:id="@+id/btn_two"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/top_bar_bg"
                android:text="按钮二" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/fragment_replace_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/top_bar_layout"
            android:background="#ff0000" >
        </LinearLayout>

    </RelativeLayout>

    布局类似这种布局即可,并不是一定非要FrameLayout

  • 相关阅读:
    编程之美-2.18 数组分割
    话题模型
    暂时跳过的Leetcode题目
    LDA主题模型
    二叉树非递归的统一实现
    取余和取模运算
    IDM非补丁破解方法
    两种建立堆的方法HeapInsert & Heapify
    非阻塞connect:Web客户程序
    非阻塞connect
  • 原文地址:https://www.cnblogs.com/bigben0123/p/4278634.html
Copyright © 2020-2023  润新知