2016-05-12 31 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我按一下按鈕在一個單獨的片段:

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 
+0

嘗試調用'.executePendingTransactions()調用''後.commit' –

+0

我上面的編輯我的代碼,但我也嘗試添加myContext.getSupportFragmentManager() .executePendingTransactions,調用.commit後,但這並沒有解決我的錯誤。 – Natalie

+0

然後肯定的是,它是由@sush所說的混合'android.support.v4.app.Fragment'和'android.app.Fragment'的結果。 –

回答

2

你跟supportFragmentManager添加片段並用FragmentManager找到它。請檢查。

+0

謝謝你指出這一點。我上面編輯了我的代碼,但我仍然得到相同的錯誤。 – Natalie

+0

發佈您的空指針異常。我懷疑你的onAttach沒有得到,所以myContext爲null – Sush

+0

我發佈了我的輸出,我用myContext打印了hm,myContext不爲null,但也許它仍然是問題? – Natalie

0

這是我如何更改我的代碼以使其工作。我只是說.addToBackStack當我第一次打開我的新HomeFragment:

@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(); 
相關問題