12

問題

Googleのドキュメントによると:

フラグメントをフラグメント内に埋め込むことができるようになりました。これは、動的で再利用可能な UI コンポーネントを、動的で再利用可能な UI コンポーネントに配置するさまざまな状況で役立ちます。たとえば、ViewPager を使用して左右にスワイプし、画面スペースの大部分を消費するフラグメントを作成する場合、フラグメントを各フラグメント ページに挿入できるようになりました。フラグメントをネストするには、フラグメントを追加する Fragment で getChildFragmentManager() を呼び出すだけです。これにより FragmentManager が返され、トップレベルのアクティビティから通常のように使用してフラグメント トランザクションを作成できます。たとえば、既存の Fragment クラス内からフラグメントを追加するコードを次に示します。

Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();

だから私は(例えば)TestFragmentのように見えました:

public class TestFragment extends Fragment {

    private View mFragmentView;
    private FrameLayout mFrameLayout;   

    public HistoryFragment() {
        super();
    }       

    @Override   
    public View onCreateView(LayoutInflater pInflater, ViewGroup pViewGroup, Bundle pBundle) {          

        mFragmentView = pInflater.inflate(R.layout.fragment_layout, pViewGroup, false);         

        mFrameLayout = (FrameLayout) mFragmentView.findViewById(R.id.framelayout);

        return mFragmentView;
    }   

    public void onDestroyView() {
        super.onDestroyView();
    }    

    /* ISSUE */
    public void doSomethingSpecial() {
        FragmentManager tFragmentManager = getChildFragmentManager();
    }
}

で、次のMainActivityようにフラグメントを初期化します。

mTestFragment = new TestFragment();
mTestFragment.doSomethingSpecial();

次に、フラグメントをViewPagerviaに渡しFragmentPagerAdapterます。

最後に、例外が発生します。しかし、私だけを使用する場合:

mTestFragment = new TestFragment();

その後、動作します。

質問

getChildFragmentManager()フラグメントのどこでメソッドを呼び出す必要がありますか? 私が間違っていることは何ですか?

新しい Android Nested Fragments を使用した良い例があれば、リンクを共有してください。どうぞよろしくお願いいたします。

4

3 に答える 3

3

簡単な答え: getChildFragmentManager()Fragment のonViewCreated()メソッドで呼び出して使用します。

例えば:

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    addInnerFragment(); // This method does the getChildFragmentManager() stuff.
}
于 2016-06-09T13:36:42.037 に答える
0

実際に私は次の場合に使用しました。

Map を ViewPager に追加しようとしていました。ご存知かもしれませんが、ViewPager の「ページ」はフラグメントであるため、Activity のマップを使用してこのコード Sample を使用できませんでした。次のようなことを行って、アクティビティから SupportMapFragment を取得しようとしていました。

SupportMapFragment mapView = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map);

しかし、mapView は常に null だったので、アプリケーションがクラッシュしました。

私は次の答えを見つけ、すぐに動作します。

これは、getChildFragmentManager() を使用する便利な例です。

これがお役に立てば幸いです。

于 2015-12-11T01:14:38.643 に答える