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
は '.executePendingTransactions()' –
.commit' '呼び出した後、私は上記の私のコードを編集し、私はまた、(myContext.getSupportFragmentManagerを追加しようとしたの呼び出し試してみてください) .exitを呼び出すと.executePendingTransactionsが返されましたが、これは私のエラーを修正しませんでした。 – Natalie
それは確かに、それは 'android.support.v4.app.Fragment'と' android.app.Fragment'を@sushのように混ぜた結果です。 –