0

我在活動中顯示對話框片段,嘗試使用show()和add()方法。下面getSupportFragmentManager在兼容庫中失敗

HelpDialogFragment hdf = HelpDialogFragment.newInstance(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.add(hdf, "dialog"); 
ft.commit(); #crash here 

的代碼給我弄IllegalStateException異常錯誤有時從上面的代碼,崩潰日誌如下

java.lang.IllegalStateException: Activity has been destroyed 
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1329) 
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:548) 
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:532) 
at com.delight.activities.HomeActivity.showHelp(HomeActivity.java:311) 

行給出否定的。 HomeActivity.java中的311是ft.commit(),在上面的代碼中提到。我的活動從兼容性庫(這是迄今爲止的更新)擴展FragmentActivity。如果我使用show()方法,則會發生同樣的崩潰。

HelpDialogFragment hdf = HelpDialogFragment.newInstance(); 
hdf.show(getSupportFragmentManager(), "dialog"); #same crash here 

所以我來給getSupportFragmentManager()引起了我的問題的結論,我不明白的是,在什麼部分的代碼我使用的是已被破壞的活動,據我瞭解getSupportFragmentManager()應該讓我返回目前活動的經理。

我需要一些幫助來解決這個問題。

+0

你可以發佈你的活動代碼嗎? – biegleux 2012-07-22 08:36:26

+0

只是一個盲注,你有沒有叫'super.onCreate(savedInstanceState);'作爲'Activity'的'onCreate()'中的第一個語句? – biegleux 2012-07-22 08:40:54

+0

是的,我叫它。 – 2012-07-22 09:30:22

回答

0

查看對話框片段你只需要調用dialogfrag.show(Fmanager,tag); 通過交易增加它給出了一個例外

0

使用getFragmentManager而不是getSupportFragmentManager

dialog.show(getFragmentManager(), "submitting"); // The second parameter doesn't really matter. 

如果不行延長DialogFragment做到這一點。關鍵是在構建對話框時使用你的Activity而不是使用支持庫。

dialog = new AlertDialogFragment(title, message); 
dialog.show(getFragmentManager(), "submitting"); 

AlertDialogFragment:

public class AlertDialogFragment extends DialogFragment { 

     static final String TAG_TITLE = "title"; 
     static final String TAG_MSG = "message"; 

     public AlertDialogFragment(){ 

     } 

     public AlertDialogFragment(String title, String message) { 
      Bundle b = new Bundle(); 
      b.putString(TAG_TITLE, title); 
      b.putString(TAG_MSG, message); 

      setArguments(b); 
     } 

     public AlertDialogFragment newInstance(String title, String message) { 
      AlertDialogFragment frag = new AlertDialogFragment(); 
      Bundle b = new Bundle(); 
      b.putString(TAG_TITLE, title); 
      b.putString(TAG_MSG, message); 

      frag.setArguments(b); 
      return frag; 
     } 

     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      String title = getArguments().getString(TAG_TITLE); 
      String message = getArguments().getString(TAG_MSG); 
       // Use getActivity()! 
      return new AlertDialog.Builder(getActivity()).setTitle(title) 
        .setMessage(message) 
        .setNegativeButton("Dismiss", new OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dismiss(); 
         } 
        }) 
        .setOnCancelListener(new OnCancelListener() { 

         @Override 
         public void onCancel(DialogInterface dialog) { 
          Log.d(TAG, "Dialog cancel"); 
         } 
        }).create(); 
     } 

     @Override 
     public void onCancel(DialogInterface dialog) { 
      Log.d(TAG, "Cancel Dialog"); 
      super.onCancel(dialog); 
     } 

     @Override 
     public void onDismiss(DialogInterface dialog) { 
      Log.d(TAG, "Dismiss Dialog"); 
      super.onDismiss(dialog); 
     } 
    } 

} 
+0

不能在活動中使用getFragmentManager(),我認爲它只能用於片段。 – 2012-07-23 15:36:43

+0

@YashwanthKumar您可以在(標準)Activity中的(support)'FragmentActivity'和'getFragmentManager()'中使用'getSupportFragmentManager()'。 – 2014-04-04 14:54:33

0

你的類應該擴展FragmentActivity不活動。這解決了我的問題