2016-05-18 5 views
0

Android Developer's Guideで書かれているように、私はをプログラムで作成し、fragment_containerFragmentとして頻繁に置き換えます。 NullPointerExceptionが発生しました。私はnullポインタでメソッドを呼び出そうとしていますが、この問題をどのように修正するのか分かりません。何か案は?なぜ私のFrameLayout fragment_containerはnullですか?

問題のあるコード

public void onClick(View v) { 
       // Check that the activity is using the layout version with 
       // the fragment_container FrameLayout 
       if (findViewById(R.id.fragment_container) != null) { 
        // Create a new Fragment to be placed in the activity layout 
        BlankFragment firstFragment = new BlankFragment(); 


        // Add the fragment to the 'fragment_container' FrameLayout 
        getSupportFragmentManager().beginTransaction() 
          .add(R.id.fragment_container, firstFragment.newInstance("","")).commit(); 
        blankFragment.setThumbnail(thumbnails.get(finalI).getDrawable()); 
       } 
       else { 
        FrameLayout frameLayout = (FrameLayout) findViewById(R.id.fragment_container); 
        BlankFragment blankFragment = new BlankFragment(); 
        getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, blankFragment).commit(); 
        blankFragment.setThumbnail(thumbnails.get(finalI).getDrawable()); 
       } 

BlankFragment.newInstance()質問

public static BlankFragment newInstance(String param1, String param2) { 
    BlankFragment fragment = new BlankFragment(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

でframeLayout
<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_below="@+id/horizontal_scroll"></FrameLayout> 

答えて

0

あなたは(使用していない静的メソッドBlankFragment.newInstance()を定義しました正しく)。代わりにnew BlankFragment()でフラグメントを作成しています。これにより、デフォルトではからnullが返されて以来、設定していない引数にアクセスする状態になります。

firstFragment.newInstance("","")とも呼ばれますが、これは正しい方法ではありません。静的メソッドを呼び出すために新しいインスタンスを作成する必要はありません。ただBlankFragment.newInstance("","")を直接実行してください。

関連する問題