2017-04-21 11 views
2

私は助けが必要です。フラグメントのIDが見つかりません

Fatal Exception: java.lang.IllegalArgumentException: No view found for id 0x7f0f016c (com.my.my:id/fragment_root_layout) for fragment a{2e8d61e1 #4 id=0x7f0f016c fragment_tag} 

私はフラグメントにフラグメントを使用します。私はCrashlyticsでクラッシュを得ました。親フラグメントのOnCreateメソッドでは、子フラグメントにヘルプFragmentManagerを追加します。私は問題がOnCreateメソッドで追加する子フラグメントであり、OnCreateViewでこれを行う必要があるという考えを持っています。確信はないけど。私はこのクラッシュを再現することはできませんが、Crashlyticでこのクラッシュを取得します。 親フラグメントlayountのすべてのビューにはidがあります。 OnCreateViewメソッドで不正なレイアウトを展開した場合にのみ、このクラッシュを再現できますが、これはライブビルドでは発生しません。 私に助言を与えてください。

EDIT:追加子フラグメントのコード

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LogUtils.verbose(TAG, "displayOverlayFragment: attempt to add a fragment using FragmentTransaction"); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     OverlayFragment overlayFragment = new OverlayFragment(); 
     fragmentTransaction.add(R.id.fragment_root_layout, overlayFragment, FRAGMENT_TAG); 
     fragmentTransaction.commit(); 
    } 

onCreateViewのコード:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(getLayoutResId(), container, false); 
     mRecyclerView = initRecyclerView(view); 

     mProgressBar = view.findViewById(R.id.progressBar); 
     mProgressBarLabel = (TextView) view.findViewById(R.id.progressBarLabel); 
     } 

     return view; 
} 
@Override 
    protected int getLayoutResId() { 
     return R.layout.fragment_favorites; 
    } 
+0

idが 'fragment_root_layout'であるビューが存在しますか? –

+0

親フラグメントの 'onViewCreated'メソッドで子フラグメントを追加してみてください。それまでは、親のレイアウトのIDは使用しないでください。 – hibob

+0

これまでに試した内容を投稿してください。 – FAT

答えて

0

たぶん、あなたはあなたのリリースビルドでproguard-rules.proで何かを宣言する必要がありますか?それがリリースビルドでのみ起こるかどうかチェックしましたか?あなたのデバッグバージョンはproguardを無視し、うまくいきますが、リリースバージョンを確認すると、クラッシュを再現するチャンスがあります。おそらく、いくつかのFragment子コンポーネントがproguardで宣言されるべきです。

+0

ありがとうございます。しかし、私はまだそれを再現することはできません、もっと試してみてください。 – LeShChEnKoUa

0

アンドロイドのフラグメントでは、それらをonStart()メソッドでコーディングする必要があります。そして、その特定のフラグメントのueにしたいレイアウトを返すためにonCreateView()を使います。