RadioGroup+Fragment实现主界面框架Demo


一、老套的实现方式ActivityGroup+Activitys官方早已不推荐使用

二、Fragment的出现时替代Activity在UI交互与布局方面的利器,当然Fragment页夹带着各种褒贬不一的吐槽。

三、Fragment和其他Android组件之间搭档可实现多种多样的复杂布局和适配效果,这篇记录的是练习时的随手记录,欢迎批评指正,后期有空可能将会继续整理其他组件与之搭配实现主界面框架的效果。

四、代码很简洁,加上引导包总共不超过100行,但是麻雀虽小却五脏俱全,你需要了解一下内容,因为本文不会描述一下基本概念,这是笔者的一贯作风:

(1)Framment的是生命周期以及与Activity生命周期之间的关系

(2)如何提高Fragment加载方法带来的效率问题,例如replace()\add()与hide()\show()的巧妙使用

(3)Java反射的使用,如果不理解反射用法,可以查看我的Java进阶博客(依旧不会讲解一些基本理论知识);

(4)你可能会有Fragment兼容性的问题提问,我只能告诉你的编译版本API>11

五、话不多说,上代码!

package jx.czh.com.appstructure.activitys;


import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.os.Bundle;
import android.widget.RadioGroup;

import java.util.ArrayList;

import jx.czh.com.appstructure.R;
import jx.czh.com.appstructure.utils.PackageUtils;

public class MainActivity extends Activity implements RadioGroup.OnCheckedChangeListener {

    private static ArrayList<String> mainFragments;

    private Context context = MainActivity.this;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mainFragments = PackageUtils.getMainFragments();
        changeFragment(PackageUtils.FRAGEMENT_HOME);
        RadioGroup radiogroup_main = (RadioGroup) findViewById(R.id.radiogroup_main);
        radiogroup_main.setOnCheckedChangeListener(this);

    }

    /**
     * 切换布局页面
     *
     * @param tag fragment对应的Tag标示(用Fragment的类名作为其Tag)
     */
    private void changeFragment(String tag) {
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        Fragment fragment = manager.findFragmentByTag(tag);
        if (fragment == null) {
            try {
                fragment = (Fragment) Class.forName(tag).newInstance();
            } catch (Exception e) {
            }
            transaction.add(R.id.fragments, fragment, tag);
        } else {
            transaction.show(fragment);
        }
        for (int i = 0; i < mainFragments.size(); i++) {
            Fragment tempF = manager.findFragmentByTag(mainFragments.get(i));
            if (tempF != null && !tempF.getTag().equals(tag)) {
                transaction.hide(tempF);
            }
        }
        transaction.commit();
    }

    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {
        switch (i) {
            case R.id.radioBtnHome:
                changeFragment(PackageUtils.FRAGEMENT_HOME);
                break;
            case R.id.radioBtnBook:
                changeFragment(PackageUtils.FRAGEMENT_BOOK);
                break;
            case R.id.radioBtnMy:
                changeFragment(PackageUtils.FRAGEMENT_MY);
                break;
        }
    }
}


你可能感兴趣的:(UI,android)