AndroidAndroid开发Android开发经验谈

Fragment与Activity之间传递数据

2017-09-04  本文已影响303人  weiyushuai

fragment 传递数据到activity 中 直接上代码:


/**
     * 当FRagmen被加载到activity的时候会被回调
     *
     * @param activity
     */
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        if (activity instanceof FragmentInteraction) {
            listener = (FragmentInteraction) activity;
        } else {
            throw new IllegalArgumentException("activity must implements FragmentInteraction");
        }

    }

    @Override
    public void onDetach() {
        super.onDetach();
        listener = null;
    }

    /**
     * 定义了宿主activity必须实现的接口
     */
    public interface FragmentInteraction {
        /**
         * Fragment 向Activity传递指令,这个方法可以根据需求来定义
         *
         * @param isTheme
         */
        void isTheme(boolean isTheme);


    }

    /**
     * 用来与外部activity交互的
     */
    private FragmentInteraction listener;

再合适的位置把想要传递的数据,通过isTheme(true)传递,我这里是设置主题通过fragment改变MainActivity的tab颜色,此方法根据业务需要自己定义,比如传递对象,变量等.

宿主activity实现FragmentInteraction重写isTheme()方法拿到fragment的数据

第一步再fragment 中定义该方法,重写fragment的onCreate方法,再onCreate把数据取出来,这样就完成了activity和fragment数据传递

 public static TestFragment newInstance(boolean isTheme) {
        Bundle bundle = new Bundle();
        bundle.putBoolean("isTheme", isTheme);  
        TestFragment fragment = new TestFragment();
        fragment.setArguments(bundle);
        return fragment;
    }

@Override
    public void onCreate(Bundle savedInstanceState) {
        Bundle bundle = getArguments();
        if (bundle != null) {
            isTheme = bundle.getBoolean("isTheme");
        }
        super.onCreate(savedInstanceState);
    }
        fragmentList.add(TestFragment.newInstance(true));
        fragmentList.add(TestFragment.newInstance(false));
        fragmentList.add(TestFragment.newInstance(true));
        fragmentList.add(TestFragment.newInstance(false));
        fragmentAdapter = new FragmentAdapter(getChildFragmentManager());
        viewpager.setAdapter(fragmentAdapter);
        tabLayout.setViewPager(viewpager);

在这里我这边是通过viewpager配合fragment 其他同理, getChildFragmentManager()由于是fragment嵌套fragment所以这里要使用getChildFragmentManager如果是activity嵌套fragment要使用getSupportFragmentManager

下篇讲述如何让viewpager不预加载

上一篇 下一篇

猜你喜欢

热点阅读