Android——Activity和Fragment的爱恨纠葛

说起Activity和Fragment大家肯定都耳熟能详的,Fragment作为碎片可以重复使用,通常一个Activity里面可以添加多个Fragment,这是Fragment最基本的用法,今天我要说的是一些不常用的纠葛,比如:Fragment里嵌套Fragment;Fragment里嵌套Activity等。从此以后你不用再纠结Fragment里面到底能不能添加Fragment,Fragment里能不能添加Activity,我在此负责的说是可以的。

不熟悉Fragment的同学请参考:
Android Fragment 真正的完全解析(上)
Android Fragment 真正的完全解析(下)

1、Fragment中添加Fragment:

这里我的需求是这样的,在Fragment中添加了一个Viewpager,Viewpager里面包含两个Fragment,实现方法和Viewpager中添加Fragment一模一样,但是有一点需要注意!!!

ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());

创建PagerAdapter时传入的FragmentManager必须是getChildFragmentManager(),而不是getSupportFragmentManager().

2、Fragment中添加Activity:

我这里的需求是添加一个外部的游戏sdk加载到当前app中,并且在app的某个Fragment中显示sdk里面的首页。我的实现方法是把sdk中的Activity当做一个view加载到当前的Fragment中。

这里涉及一个知识如何获取Activity的view??熟悉的同学应该明白该怎么做了,不熟悉的也莫着急,听偶慢慢道来。

获取Activity的view用到了一个类LocalActivityManager。如何使用请具体参考代码:

public class GameYunFragment extends BaseFragment {
    @BindView(R.id.yunGameLayout)
    RelativeLayout yunGameLayout;
    private boolean isAttach = false;
    private LocalActivityManager localActivityManager;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        isAttach = true;
        localActivityManager = new LocalActivityManager(getActivity(), true);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        localActivityManager.dispatchCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_game_yun_layout, container, false);
        ButterKnife.bind(this, view);
        return view;
    }

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

        Intent intent = new Intent(getActivity().getApplicationContext(), MainActivity.class);
        View gameView = localActivityManager.startActivity("YunGame",intent).getDecorView();
        yunGameLayout.removeAllViews();
        yunGameLayout.addView(gameView);
    }

    @Override
    public void onResume() {
        super.onResume();
        localActivityManager.dispatchResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        localActivityManager.dispatchPause(true);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值