0

次のコードを使用して別の Fragment 内にある a を開こうとしていますFragmentが、原因のない Null Pointer Exception が発生します。

Fragment newFragment = new SecondFragment(); 
// consider using Java coding conventions (upper char class names!!!)
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.menuitem_detail_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit(); 

このコードはFragment ( )onItemClickListener内のメソッド内の基本内にあります。onCreateViewandroid.support.v4.app.Fragment

私が間違っているかもしれないことについてのアイデアはありますか?

4

3 に答える 3

2

getFragmentManagerでは、getFragmentManager の代わりにgetActivity().getSupportFragmentManager()orを使用する必要があります。getChildFragmentManager()NPE が transaction.replace() でスローされた場合は、適切なレイアウトを置き換えていることを確認する必要があります。

RelativeLayout rl = (RelativeLayout) getActivity().findViewById(R.id.menuitem_detail_container);
transaction.replace(rl.getId(), newFragment);

私はあなたのコードを知らないので、上記は単なる例ですが、あなたはアイデアを得るかもしれません. この例では、使用しているコンテナー レイアウトがアクティビティ XML で同じ名前を持っていると想定しています。

null を返すものを置き換えようとしないでください。onCreate のコンテナーを使用している場合は、ログに記録して、null かどうかを確認してください。

これで問題が解決しない場合は、Logcat の出力を投稿してください。

于 2013-12-09T22:35:39.913 に答える
0

ネストされたフラグメントを使用する場合は、内側のフラグメントに対して getChildFragmentManager()が必要です。

また、FragmentManager と ChildFragmentManager の両方のサポート ライブラリからインポートしていることを確認してください。

于 2013-12-09T22:23:12.183 に答える
0

私の transaction.replace を探します:

transaction.replace(R.id.provas_view, new ListaProvasFragment(), ListaProvasFragment.class.getCanonicalName());

于 2013-12-09T22:32:48.763 に答える