Android fragmentネストfragmentで発生した問題:no activity

6041 ワード

package com.example.fragmentNavigation2.fragment;



import android.content.Context;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentPagerAdapter;

import android.support.v4.view.ViewPager;

import android.view.ContextThemeWrapper;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import com.example.fragmentNavigation2.R;

import com.viewpagerindicator.TabPageIndicator;



import java.lang.reflect.Field;



public class AddressFragment extends Fragment {



    private static final String[] CONTENT = new String[]{"    ", "    ", "     ", "    "};

    private FragmentManager fragmentManager;

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);



        fragmentManager = getChildFragmentManager();

        final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), com.viewpagerindicator.R.style.Theme_PageIndicatorDefaults);

        // clone the inflater using the ContextThemeWrapper

        LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);

        View view = localInflater.inflate(R.layout.simple_tabs, container, false);



        FragmentPagerAdapter adapter = new FragmentPagerAdapter(fragmentManager) {



            @Override

            public Fragment getItem(int position) {

                return TestFragment.newInstance(CONTENT[position % CONTENT.length]);

            }



            @Override

            public CharSequence getPageTitle(int position) {

                return CONTENT[position % CONTENT.length].toUpperCase();

            }



            @Override

            public int getCount() {

                return CONTENT.length;

            }

        };



        ViewPager pager = (ViewPager) view.findViewById(R.id.pager);

        pager.setAdapter(adapter);



        TabPageIndicator indicator = (TabPageIndicator) view.findViewById(R.id.indicator);

        indicator.setViewPager(pager);

        indicator.setFillViewport(true);

        return view;

    }



    /**

     *       fragment  fragment      

     */

    @Override

    public void onDetach() {

        super.onDetach();

        try {

            //       

            Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");

            childFragmentManager.setAccessible(true);

            childFragmentManager.set(this, null);

        } catch (NoSuchFieldException e) {

            throw new RuntimeException(e);

        } catch (IllegalAccessException e) {

            throw new RuntimeException(e); } }

}

解決策は赤い部分で、fragmentManagerを取得する際にgetChildFragmentManager()という方法を使用します.
またonDetachメソッドを書き直し、赤い部分に従って書きます.