2014-10-10 44 views
-1

我在活動中有一個listfragment,在按下其他選項的行時會打開一個dialogfragment,現在我旋轉設備並從dialogfragment中選擇一個選項,它將引發IllegalStateException .. ..片段不附加。在設備方向更改後引發IllegalStateException

  choiceDialog 
      .setOnClickListDialogClickListener(new StandardListDialogFragment.OnClickListener<String>() { 
       @Override 
       public void onClick(DialogInterface dialog, int which, 
         String value) { 
        Intent intent = new Intent(this.getActivity(), 
        DutyEditor.class);   
       startActivityForResult(intent, 0); 
        dialog.dismiss(); 
       } 
      }); 

回答

2

發生這種情況是因爲Fragment被銷燬,並且每當方向更改時都使用FragmentManager重新創建。

使用片段時片段工作

  • 避免制定者時,你應該堅持這些規則。
  • 切勿在活動中持有對片段的字段引用。
  • 在onAttach()和onDetach()之後,您可以在片段上保存一個活動的字段引用,但是我發現最好調用getActivity(),並在每次需要進行短操作時檢查null。

最好的選擇是在DialogFragment本身中調用startActivityForResult()。

但是,無論何時您確實需要將DialogFragment點擊事件傳遞給活動,請使用接口。例如。

public final class SomeDialogFragment extends DialogFragment { 

    /** 
    * Callbacks of {@link SomeDialogFragment} 
    */ 
    public interface SomeDialogFragmentCallbacks { 
     /** 
     * Called when user pressed some button 
     */ 
     void onSomeButtonClick(); 
    } 

    @Override 
    public void onAttach(final Activity activity) { 
     super.onAttach(activity); 
     // Make sure the Activity can receive callbacks 
     if (!(activity instanceof SomeDialogFragmentCallbacks)) { 
      throw new RuntimeException("Should be attached only to SomeDialogFragmentCallbacks"); 
     } 
    } 


    // now whenever a button is clicked 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     final SomeDialogFragmentCallbacks callbacks = (SomeDialogFragmentCallbacks) getActivity(); 
     if (callbacks != null) { 
      callbacks.onSomeButtonClick(); 
     } 
    } 
} 

而且所有使用此DialogFragment的活動都應實現回調方法。

public final class SomeActivity extends Activity implements SomeDialogFragmentCallbacks { 

    @Override 
    public void onSomeButtonClick() { 
     // Handle some DialogFragment button click here 
    } 

} 
+0

謝謝,它的工作:) – Azmat 2014-10-10 13:35:01

相關問題