我有一個擴展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我按一下按鈕在一個單獨的片段:
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;
}
}
我得到一個NullPointerException和我的應用程序崩潰,當我按一下按鈕,「HM」出來空。有一些簡單的我錯過了,但我似乎無法找到那是什麼。
這裏是我的堆棧跟蹤:
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() .executePendingTransactions,調用.commit後,但這並沒有解決我的錯誤。 – Natalie
然後肯定的是,它是由@sush所說的混合'android.support.v4.app.Fragment'和'android.app.Fragment'的結果。 –