管理Fragment的框架Fragmentation

1.fragment的出现本来是为了解决android适配的,但是如果使用Fragment开发app可以使软件更流畅

但是fragment的管理比较麻烦,个人建议使用Fragmentation框架对Fragment进行统一管理

1.所有的Fragment都要集成SurpportFragment

/**
 * Author:DoctorWei
 * Time:2018/11/3 11:16
 * Description:基类Fragment
 * email:[email protected]
 */

public abstract class BaseFragment extends SupportFragment {
    private BaseActivity mActivity;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mActivity= (BaseActivity) context;
    }
    @Override
    public void onDetach() {
        super.onDetach();
        mActivity=null;
    }
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(getLayoutId(),container,false);
        return view;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        init(view);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initData(savedInstanceState);
    }
    protected abstract int getLayoutId();

    protected abstract void init(View view);

    protected abstract void initData(Bundle savedInstanceState);

2.所有的Activity都要继承SurpportActivity

/**
 * Author:DoctorWei
 * Time:2018/11/2 18:33
 * Description:定义一个Activity的基类 用于加载
 * email:[email protected]
 */
public abstract class BaseActivity extends SupportActivity {
    @Override
    public void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutId());
        initView();
        initData(savedInstanceState);
    }

    protected abstract void initData(Bundle savedInstanceState);

    protected abstract void initView();

    protected abstract int getLayoutId();

    //写一个全局的跳转
    public  void openActivityWithIntent(@NonNull Class activity,@NonNull Bundle bundle){
        Intent intent=new Intent(this,activity);
        if (bundle!=null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }
    public Bundle getIntentBundle(){
        Bundle bundle = getIntent().getExtras();
        return bundle;
    }
}

3.在Acitivity调用Fragment
 

public class MainActivity extends BaseActivity implements View.OnClickListener {

    private ImageView mAppIvTabMain;
    /**
     * 首页
     */
    private TextView mAppTvTabMain;
    private RelativeLayout mAppRlTabMain;
    private ImageView mAppIvTabBeauty;
    /**
     * 美女
     */
    private TextView mAppTvTabBeauty;
    private RelativeLayout mAppRlTabBeauty;
    private ImageView mAppIvTabFunction;
    /**
     * 功能
     */
    private TextView mAppTvTabFunction;
    private RelativeLayout mAppRlTabFunction;
    private ImageView mAppIvTabVideo;
    /**
     * 消息
     */
    private TextView mAppTvTabVideo;
    private RelativeLayout mAppRlTabVideo;
    private ImageView mAppIvTabSetting;
    /**
     * 我的
     */
    private TextView mAppTvTabSetting;
    private RelativeLayout mAppRlTabSetting;
    private LinearLayout mLlBottom;
    //存储imageView和TextView的集合
    ImageView[] imageViews = new ImageView[5];
    TextView[] textViews = new TextView[5];

    @Override
    protected void initData(Bundle savedInstanceState) {
        if (savedInstanceState == null) {
            loadRootFragment(R.id.fl_container, HomeFragment.newInstance()); //activity初始加载HomeFragment
        }
    }

    @Override
    protected void initView() {
        mAppIvTabMain = (ImageView) findViewById(R.id.app_iv_tab_main);
        mAppTvTabMain = (TextView) findViewById(R.id.app_tv_tab_main);
        imageViews[0] = mAppIvTabMain;
        textViews[0] = mAppTvTabMain;
        mAppRlTabMain = (RelativeLayout) findViewById(R.id.app_rl_tab_main);
        mAppRlTabMain.setOnClickListener(this);
        mAppIvTabBeauty = (ImageView) findViewById(R.id.app_iv_tab_beauty);
        mAppTvTabBeauty = (TextView) findViewById(R.id.app_tv_tab_beauty);
        imageViews[1] = mAppIvTabBeauty;
        textViews[1] = mAppTvTabBeauty;
        mAppRlTabBeauty = (RelativeLayout) findViewById(R.id.app_rl_tab_beauty);
        mAppRlTabBeauty.setOnClickListener(this);
        mAppIvTabFunction = (ImageView) findViewById(R.id.app_iv_tab_function);
        mAppTvTabFunction = (TextView) findViewById(R.id.app_tv_tab_function);
        imageViews[2] = mAppIvTabFunction;
        textViews[2] = mAppTvTabFunction;
        mAppRlTabFunction = (RelativeLayout) findViewById(R.id.app_rl_tab_function);
        mAppRlTabFunction.setOnClickListener(this);
        mAppIvTabVideo = (ImageView) findViewById(R.id.app_iv_tab_video);
        mAppTvTabVideo = (TextView) findViewById(R.id.app_tv_tab_video);
        imageViews[3] = mAppIvTabVideo;
        textViews[3] = mAppTvTabVideo;
        mAppRlTabVideo = (RelativeLayout) findViewById(R.id.app_rl_tab_video);
        mAppRlTabVideo.setOnClickListener(this);
        mAppIvTabSetting = (ImageView) findViewById(R.id.app_iv_tab_setting);
        mAppTvTabSetting = (TextView) findViewById(R.id.app_tv_tab_setting);
        imageViews[4] = mAppIvTabSetting;
        textViews[4] = mAppTvTabSetting;
        mAppRlTabSetting = (RelativeLayout) findViewById(R.id.app_rl_tab_setting);
        mAppRlTabSetting.setOnClickListener(this);
        mLlBottom = (LinearLayout) findViewById(R.id.ll_bottom);

    }

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.app_rl_tab_main:
                HomeFragment homeFragment=findFragment(HomeFragment.class);
                Bundle newBundle=new Bundle();
                newBundle.putString(Extra.FRAGMENT_FROM,"主页来自:"+getTopFragment().getClass());
                start(homeFragment, SupportFragment.SINGLETASK);
                break;
            case R.id.app_rl_tab_beauty:
                BeautyFragment beautyFragment=findFragment(BeautyFragment.class);
                if (beautyFragment==null){
                    popTo(HomeFragment.class, false, new Runnable() {
                        @Override
                        public void run() {
                            start(BeautyFragment.newInstance());
                        }
                    });
                }else{
                    start(beautyFragment,SupportFragment.SINGLETASK);
                }
                break;
            case R.id.app_rl_tab_function:
                FunctionFragment functionFragment=findFragment(FunctionFragment.class);
                if (functionFragment==null){
                    popTo(FunctionFragment.class, false, new Runnable() {
                        @Override
                        public void run() {
                            start(FunctionFragment.newInstance());
                        }
                    });
                }else{
                    start(functionFragment,SupportFragment.SINGLETASK);
                }
                break;
            case R.id.app_rl_tab_video://消息
                MessageFragment messageFragment=findFragment(MessageFragment.class);
                if (messageFragment==null){
                    popTo(MessageFragment.class, false, new Runnable() {
                        @Override
                        public void run() {
                            start(MessageFragment.newInstance());
                        }
                    });
                }else{
                    start(messageFragment,SupportFragment.SINGLETASK);
                }
                break;
            case R.id.app_rl_tab_setting:
                SettingFragment settingFragment=findFragment(SettingFragment.class);
                if (settingFragment==null){
                    popTo(SettingFragment.class, false, new Runnable() {
                        @Override
                        public void run() {
                            start(SettingFragment.newInstance());
                        }
                    });
                }else{
                    start(settingFragment,SettingFragment.SINGLETASK);
                }

                break;
        }
    }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:orientation="vertical">
    <FrameLayout
        android:id="@+id/fl_container"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_0"
        android:layout_weight="1"
        android:layout_above="@+id/ll_bottom">
    </FrameLayout>
    <LinearLayout
        android:id="@+id/ll_bottom"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <RelativeLayout
            android:id="@+id/app_rl_tab_main"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:gravity="center_vertical">

            <ImageView
                android:id="@+id/app_iv_tab_main"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:src="@drawable/tab_menu_message" />

            <TextView
                android:id="@+id/app_tv_tab_main"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/app_iv_tab_main"
                android:layout_centerInParent="true"
                android:padding="2dp"
                android:text="首页"
                android:textSize="10sp" />

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/app_rl_tab_beauty"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:gravity="center_vertical">

            <ImageView
                android:id="@+id/app_iv_tab_beauty"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:src="@drawable/tab_menu_channel" />

            <TextView
                android:id="@+id/app_tv_tab_beauty"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/app_iv_tab_beauty"
                android:layout_centerInParent="true"
                android:padding="2dp"
                android:text="美女"
                android:textSize="10sp" />

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/app_rl_tab_function"
            android:layout_width="100dp"
            android:layout_height="90dp"
            android:layout_gravity="bottom"
            android:gravity="center_vertical">

            <ImageView
                android:id="@+id/app_iv_tab_function"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:layout_centerInParent="true"
                android:src="@drawable/tab_better_pressed" />

            <TextView
                android:id="@+id/app_tv_tab_function"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/app_iv_tab_function"
                android:layout_centerInParent="true"
                android:padding="2dp"
                android:text="功能"
                android:textSize="10sp" />

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/app_rl_tab_video"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:gravity="center_vertical">

            <ImageView
                android:id="@+id/app_iv_tab_video"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:src="@drawable/tab_menu_setting" />

            <TextView
                android:id="@+id/app_tv_tab_video"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/app_iv_tab_video"
                android:layout_centerInParent="true"
                android:padding="2dp"
                android:text="消息"
                android:textSize="10sp" />

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/app_rl_tab_setting"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:gravity="center_vertical">

            <ImageView
                android:id="@+id/app_iv_tab_setting"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:src="@drawable/tab_menu_message" />

            <TextView
                android:id="@+id/app_tv_tab_setting"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/app_iv_tab_setting"
                android:layout_centerInParent="true"
                android:padding="2dp"
                android:text="我的"
                android:textSize="10sp" />

        </RelativeLayout>

    </LinearLayout>

</LinearLayout>

猜你喜欢

转载自blog.csdn.net/Anthonybuer/article/details/83929927