2013-11-27 1 views
1

현재 AlertDialog를 사용하여 응용 프로그램에 간단한 대화 상자를 만듭니다. 나는이 같은 모습을 사용하고 코드 :화면을 회전 할 때 AlertDialog를 다시 만드는 가장 좋은 방법은 무엇입니까?

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setCancelable(false); 
builder.setTitle(DialogTitle); 
builder.setItems(R.array.options, new DialogInterface.OnClickListener() { 
@Override 
public void onClick(DialogInterface dialog, int which) { 
    switch (which) { 
     case 0: 
      reset(); 
     break; 
     case 1: 
     exit(); 
     break; 
     default: 
     break; 
     } 
    } 
}); 
builder.show(); 

나는 최선의 선택이 DialogFragment를 확장하는 클래스를 생성하는 다음 내 DialogFragment 대신 내 현재 구현을 사용할 수 있음을 읽었습니다.

는 사람이 더 나은 뭔가를 제안 할 가능성이 나에게 예를주고, 이것이 최선의 해결책이 확인할 수 있습니까?

감사합니다.

+0

예, 요즘에는 'DialogFragment'를 사용하는 것이 적절할 것입니다. d.android.com의 [Dialogs topic] (http://developer.android.com/guide/topics/ui/dialogs.html#DialogFragment)에 설명서와 예제가 있습니다. DialogFragment를 사용하면 프레임 워크가 구성 변경시 상태를 올바르게 관리 할 수 ​​있고 재사용이 가능한 약간의 구성 요소가된다는 이점이 있습니다. 'android : configChanges' (아래에 제안 됨)를 사용하면 원하지 않는 몇 가지 부작용이 생기고 덜 유연한 코드 기반을 만들 수 있습니다. –

+0

DialogFragment와 함께갔습니다. Dialogs 주제를 파고 들자 나는 필자의 요구를 충족시키는 것을 쉽게 구현했다. 필자의 테스트 활동에서 Fragment "out of the box"로 화면을 회전 할 수있게되었습니다. 아직 응용 프로그램에서 구현하지 않았습니다. MH 감사합니다. –

답변

1
public class ListDialogFragment extends DialogFragment 
    { 
    // Use this instance of the interface to deliver action events 
    private listDialogListener mListener; 
    private String title; 
    private int items; 

    /** 
    * Create a new instance of EndGameDialogFragment, String dialogTitle 
    * and ing dialogListItems as an argument. 
    */ 
    static ListDialogFragment newInstance(String dialogTitle, int dialogListItems) 
    { 
     ListDialogFragment frag = new ListDialogFragment(); 

     // Supply num input as an argument. 
     Bundle args = new Bundle(); 
     args.putString("title", dialogTitle); 
     args.putInt("items", dialogListItems); 
     frag.setArguments(args); 

     return frag; 
    } 


    /* The activity that creates an instance of this dialog fragment must 
    * implement this interface in order to receive event callbacks. 
    * Each method passes the DialogFragment in case the host needs to query it. */ 
    public interface listDialogListener 
    { 
     public void onDialogClick(DialogFragment dialog, int which); 
    } 

    // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener 
    @Override 
    public void onAttach(Activity activity) 
    { 
     super.onAttach(activity); 
     // Verify that the host activity implements the callback interface 
     try 
     { 
      // Instantiate the NoticeDialogListener so we can send events to the host 
      mListener = (listDialogListener) activity; 
     } 
     catch (ClassCastException e) 
     { 
      // The activity doesn't implement the interface, throw exception 
      throw new ClassCastException(activity.toString() 
        + " must implement NoticeDialogListener"); 
     } 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) 
    { 
     title = getArguments().getString("title"); //retrive the titleString 
     items = getArguments().getInt("items"); //retrive array of items for the list (from strings.xml) 

     //build the dialog 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle(title); 
     builder.setItems(items, new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int which) 
      { 
       switch(which) 
       { 
        case 0: 
         mListener.onDialogClick(ListDialogFragment.this, which); 
         break; 
        case 1: 
         mListener.onDialogClick(ListDialogFragment.this, which); 
         break; 
        default: 
         break; 
       } 
      } 
     }); 
     return builder.create(); 
    } 

} 
+0

나는 단편 제대로 –

+0

안녕하세요 Reneez을 다시이 코드에서 아무것도 볼 수없는, 내가 조각을 다시 할 필요가 없습니다. 이전에 대화 상자를 직접 사용하고 있었고 DialogFragment를 사용하면 필요한 모든 기능을 사용할 수 있다는 것을 알지 못했습니다. 위와 같이 구현하면 화면의 회전이 프래그먼트 수명주기에 자동으로 처리되고 화면이 회전 될 때 대화 상자가 사라지지 않습니다. 이전처럼 문제가있었습니다. –

+0

조각 라이프 사이클 - http://developer.android.com/guide/components/fragments.html 파괴하고 화면이 켜져있을 때 그냥 활동과 같은 대화 상자를 다시 만듭니다. –

0

당신은 방향 변화를 인식하고 열려있는 경우 AlertDialog를 복원하는 활동의 onConfigurationChanged(Configuration newConfig) 방법을 대체 할 수 있습니다. 이를 위해서는 매니페스트 android:configChanges="orientation의 활동 정의에 다음 태그가 필요합니다. 좋은 소개는 here입니다.

+0

구현을 원하는 사람에게 적합합니다. 여기 내가 사용을 종료 한 하나입니다. –

+0

그러면 답을 받아 들여야합니다. ;) – Baschi

+0

Baschi에게 감사드립니다. –