2014-04-19 6 views
0

내 문제는 사용자가 취소 버튼을 클릭하여 장치를 돌릴 때 내 액티비티 대화 상자 인스턴스를 다시 생성한다는 것입니다. 결과적으로 장치를 회전해도 대화 상자가 사라지지 않고 다시 나타납니다.안드로이드 - 회전하는 동안 대화 상자를 처리하는 방법

이 DialogFragment입니다 :

new DistanceDialog().show(getFragmentManager(), "distancedialog"); 

당신이 회전 사이의 대화 상태를 처리하는 방법의 가장 좋은 방법은 무엇인지 나를 설명 할 수 :

public class DistanceDialog extends DialogFragment{ 



@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    setRetainInstance(true); 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    // Get the layout inflater 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 

    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder.setView(inflater.inflate(R.layout.distance_dialog, null)) 
    // Add action buttons 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.dismiss(); 
       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.dismiss(); 
       } 
      });  
    return builder.create(); 
} 

@Override 
public void onDestroyView() { 
    if (getDialog() != null && getRetainInstance()) 
     getDialog().setDismissMessage(null); 
    super.onDestroyView(); 
} 

    } 

가 그 다음, 조각에 내가 대화를 호출

? 고마워요!

는 UPDATE :

많은 테스트 후 나는이 문제는 회 전자의 행동에 발생하는 것으로 나타났습니다. 실제로 간단한 단추를 사용하여 대화 상자를 호출하면 제대로 작동하지만 회 전자 수신기에서 대화 상자를 호출하려고하면 문제가 지속됩니다.

  @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, 
      long ID){ 
     switch(pos){ 
     case 0: 
      //DOING SOME STUFF 
      break; 
     case 1: 
      //DOING SOME STUFF 

      break; 
     case 2: 
      new DistanceDialog().show(getFragmentManager(), "distancedialog"); 
      break; 
     } 

답변

0

onDestroyViewsetDismissMessage 호출을 제거

내가 사용하고 회 전자 청취자입니다.

보유 인스턴스를 onCreate 또는 onCreateDialog으로 설정하면됩니다.

setRetainInstance(true); 

및 응답 Libin의 onDestroyView

@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
} 
+0

감사를 변경할 수 있지만, 나는이 문제가 해결되지 생각합니다. 위의 업데이트를 읽으십시오. –

관련 문제