Fragment万能容齐

引言:在app中Fragment的使用越来越多,Fragment本身是一个碎片,需要依附于界面也就是Activity,但是写一个新的Fragment就写一个与之相匹配的Activity会增加代码量,所有我就思考着写一个万能的Activity容器界面来加载Fragment

主要代码

public class SubPageTransferActivity extends BaseActivity implements SubPageTransferCallback {


    private static final String TAG = "SubPageTransferActivity";

    /**
     * 跳转到二级中转页面
     *
     * @param context       当前上下文
     * @param fragmentClass 目标页面
     * @param bundle        传递的数据
     */
    public static void jump(Context context, Class<?> fragmentClass, Bundle bundle) {
        jump(context, fragmentClass, bundle, ActivityAnimType.DEFAULT);
    }

    /**
     * 跳转到二级中转页面
     *
     * @param context       当前上下文
     * @param fragmentClass 目标页面
     * @param bundle        传递的数据
     */
    public static void jump(Context context, Class<?> fragmentClass, Bundle bundle, int jumpAnimType) {
        Intent intent = new Intent(context, SubPageTransferActivity.class);
        intent.putExtra(BUNDLE_FRAGMENT_CLASS, fragmentClass);
        if (bundle != null) {
            intent.putExtra(Constants.BUNDLE_BUNDLE, bundle);
        }
        AppUtil.startActivity(context, intent, jumpAnimType);
    }

    /**
     * 跳转到二级中转页面
     *
     * @param context       当前上下文
     * @param fragmentClass 目标页面
     * @param bundle        传递的数据
     * @param requestCode   跳转回掉的Code
     */
    public static void jumpForResult(Context context, Class<?> fragmentClass, Bundle bundle, int requestCode) {
        Intent intent = new Intent(context, SubPageTransferActivity.class);
        intent.putExtra(BUNDLE_FRAGMENT_CLASS, fragmentClass);
        if (bundle != null) {
            intent.putExtra(Constants.BUNDLE_BUNDLE, bundle);
        }
        AppUtil.startActivityForResult(context, intent, requestCode);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        Class<?> fragmentClass = (Class) intent.getSerializableExtra(BUNDLE_FRAGMENT_CLASS);
        if (fragmentClass != null) {
            try {
                Fragment fragmentInstance = (Fragment) fragmentClass.newInstance();
                Bundle bundle = intent.getBundleExtra(Constants.BUNDLE_BUNDLE);
                fragmentInstance.setArguments(bundle);
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fl_container, fragmentInstance, TAG)
                        .commitAllowingStateLoss();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG);
            if (fragment instanceof OnBackListener) {
                OnBackListener onBackListener = (OnBackListener) fragment;
                onBackListener.onBackClickEvent();
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }


}

**代码分析**

1、主要逻辑就是在onCreate方法中通过反射获取Fragment的名称(通过Intent传递过来的参数),然后设置Fragment对应的Bundle参数,然后通过事务提交给FragmentManager就可以了。

2、重写onKeyDown方法中的KeyEvent.KEYCODE_BACK事件通过Tag获取到界面添加的Fragment,如果Fragment实现OnBackListener接口,就调用OnBackListener.onBackClickEvent()方法,将返回键的事件传递个Fragment,可以让Fragment在操作返回键监时候做一些自己的操作,仅仅是添加操作,并不拦截返回键事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值