2016-05-12 43 views
-1

FragmentActivityを拡張する主なアクティビティがあります。私のアプリが起動すると、この主な活動は、レイアウトに断片「HomeFragment」を配置しますfindFragmentByTag()を使用してフラグメントにアクセスするとNullPointerExceptionが発生する

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.container, new HomeFragment(),"Home_Fragment").commit(); 

} 

私はまた、別のフラグメントのボタンをクリックしたときに、このフラグメントにアクセスできるようにする必要がありますが、私はしたくありません新しいHomeFragmentをコンテナに入れる。 FindFragmentByTag()を使用してHomeFragmentにアクセスしたいのですが、私は常にHomeFragmentを動的ウィジェットで更新しているので、毎回新しいHomeFragmentを開く必要はありません。ここでは、私は別の断片に私のボタンのクリックでHomeFragmentにアクセスしようとしている方法です:私はボタンと「HM」をクリックしたときに、私はNullPointerExceptionが取得し、私のアプリがクラッシュしています

public class MenuFragment extends Fragment { 

ImageButton btnHOME; 
private FragmentActivity myContext; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

} 


@Override 
public void onAttach(Activity activity) { 
    myContext=(FragmentActivity) activity; 
    super.onAttach(activity); 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fr_menu, container, false); 

    btnHOME = (ImageButton) view.findViewById(R.id.btnHOME); 

    btnHOME.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      HomeFragment hm = (HomeFragment)myContext.getSupportFragmentManager().findFragmentByTag("Home_Fragment"); 
      Log.d("tag_name", "HomeFragment" + hm + myContext); 
      FragmentTransaction ft = myContext.getSupportFragmentManager().beginTransaction(); 
      Log.d("tag_name", "FragmentTransaction" + ft); 
      ft.replace(R.id.container, hm, "Home_Fragment").commit(); 

     } 
    }); 

    return view; 
} 


} 

nullが出てきます。私は行方不明のものがありますが、それが何かを見つけることができません。ここで

は私のStackTraceです:

05-12 13:50:05.643 9044-9044/it.anddev.bradipao.janus D/tag_name: [email protected] 
05-12 13:50:05.643 9044-9044/it.anddev.bradipao.janus D/tag_name: FragmentTransactionBackStackEntry{22079980} 
05-12 13:50:05.643 9044-9044/it.anddev.bradipao.janus D/AndroidRuntime: Shutting down VM 
05-12 13:50:05.643 9044-9044/it.anddev.bradipao.janus W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x437c0160) 
05-12 13:50:05.643 9044-9044/it.anddev.bradipao.janus E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: it.anddev.bradipao.janus, PID: 9044 
                    java.lang.NullPointerException 
                     at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:414) 
                     at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:449) 
                     at it.anddev.bradipao.janus.MenuFragment$1.onClick(MenuFragment.java:69) 
                     at android.view.View.performClick(View.java:4487) 
                     at android.view.View$PerformClick.run(View.java:18746) 
                     at android.os.Handler.handleCallback(Handler.java:733) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:149) 
                     at android.app.ActivityThread.main(ActivityThread.java:5257) 
                     at java.lang.reflect.Method.invokeNative(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:515) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604) 
                     at dalvik.system.NativeStart.main(Native Method) 
05-12 13:50:09.423 9044-9069/it.anddev.bradipao.janus I/System.out: TRY_1 
+0

は '.executePendingTransactions()' –

+0

.commit' '呼び出した後、私は上記の私のコードを編集し、私はまた、(myContext.getSupportFragmentManagerを追加しようとしたの呼び出し試してみてください) .exitを呼び出すと.executePendingTransactionsが返されましたが、これは私のエラーを修正しませんでした。 – Natalie

+0

それは確かに、それは 'android.support.v4.app.Fragment'と' android.app.Fragment'を@sushのように混ぜた結果です。 –

答えて

2

あなたはsupportFragmentManagerにフラグメントを追加し、FragmentManagerでそれを見つけることです。それを確認してください。

+0

ありがとうございます。上記のコードを編集しましたが、私はまだ同じエラーが発生しています。 – Natalie

+0

nullポインター例外を送信します。私はあなたのonAttachが取得していないと疑うので、myContextはヌルです – Sush

+0

私は私の出力を掲示し、私はmyContextでhmを印刷しています、そしてmyContextはnullではありませんが、 – Natalie

0

ここで、コードを変更して動作させる方法を示します。私が最初に私の新しいHomeFragmentを開いたとき、私はちょうど.addToBackStackを追加しました:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.container, new HomeFragment(),"Home_Fragment") 
    .addToBackStack("Home_Fragment").commit(); 
関連する問題