【Android】Fragment管理ツール類

3486 ワード

前のプロジェクトはフラジャイティでの切り替えとフラジャイメンテーションが必要ですが、フラジャイティ自身は自分を破壊することができません。
Frangement ManagerとFrangentTransationもFragment類では実例化できません。Activityでインターフェースを書くのは面倒くさいので、いっそのことツール類を書きました。
ソースは以下の通りです
package com.dubhe.broken.fragmenthelper;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;

/**
 *   :DubheBroken
 *   :2018/11/19
 *   :github.com/DubheBroken/FragmentHelper
 *   :Fragment     
 */

public class FragmentHelper {

    private static FragmentManager fragmentManager;
    private static FragmentTransaction fragmentTransaction;

    private static FragmentManager getFragmentManager() {
        return fragmentManager;
    }

    private static void setFragmentManager(FragmentManager fragmentManager) {
        FragmentHelper.fragmentManager = fragmentManager;
    }

    public static FragmentTransaction getFragmentTransaction() {
        return fragmentTransaction;
    }

    public static void setFragmentTransaction(FragmentTransaction fragmentTransaction) {
        FragmentHelper.fragmentTransaction = fragmentTransaction;
    }

    private static void initFragmentTransaction() {
        fragmentTransaction = fragmentManager.beginTransaction();
    }

    /**
     *     onBackPressed      
     *       fragment
     *          ,    
     * @param activity   activity,   AppCompatActivity
     *                  fragment    (AppCompatActivity)getActivity()      
     */
    public static void back(AppCompatActivity activity) {
        if (getFragmentManager().getBackStackEntryCount() <= 1) {
            activity.moveTaskToBack(true);
        }else{
            fragmentManager.popBackStack();
        }
    }

    /**
     *   Fragment     
     *
     * @param activity   activity,   AppCompatActivity
     *                  fragment    (AppCompatActivity)getActivity()      
     * @param fragment   fragment  
     */
    public static void switchFragment(Fragment fragment, AppCompatActivity activity) {
        FragmentHelper.setFragmentManager(activity.getSupportFragmentManager());
        FragmentHelper.initFragmentTransaction();
        //frame  id
        fragmentManager.findFragmentById(R.id.frame_main);
        fragmentTransaction
                .replace(R.id.frame_main, fragment)
                .addToBackStack(null)
                .commit();//          frameLayout           fragment
//                .commitAllowingStateLoss();
    }

}
まずあなたのプロジェクトの中でFraameLayoutコントロールをFragmentの容器として用意して、上記のソースコードをタイプに書いてあなたのプロジェクトに入れて、64行目と66行目のframe me_をください。メーンをあなたのFrame LayoutのIDに変えます。
Fregamentを切り替え
鶏肉炒めは簡単で、一行のコードです。
FragmentHelper.switchFragment(new Fragment2(), this);
Fragmentをキャンセルします
リターンキーを直接押してもいいです。ボタンはリターンを実現したいです。直接リターンキーの上にマッピングしてもいいです。
リターンキーを書き直したら、この行のコードでキャンセル操作ができます。
Activityでは 
FragmentHelper.back(this);
Fragmentの中で 
FragmentHelper.back((AppCompatActivity) getActivity());
(ここの主なAcitiviyはAppComppatActivityで、FrangentActivityをサポートしていますが、この類は古いのでおすすめできません。FragmentActivityが必要であれば、FragmenntHelper.javaのApComppatActivityをFragment Activityに変えて、強い回転を取ればいいです。
FrangementaManagerとFrangentTransationの例を取得します。
直接ゲットすればいいです
FragmentManager fm = FragmentHelper.getFragmentManager();

FragmentTransaction ft = FragmentHelper.getFragmentTransaction();