8

화면 방향 변화 그 다음에 활동의 한 부분이있다 :화면 방향 변경 후 dialogFragment는 호출하지 않고 분명히 나타납니다

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    et = (EditText) findViewById(R.id.editText1); 

    et.setOnLongClickListener(new View.OnLongClickListener() 
    { 
     @Override 
     public boolean onLongClick(View v) 
     { 
      Fragment1 dialogFragment = new Fragment1(); 
      dialogFragment.show(getFragmentManager(), null); 
      dialogFragment.setTextDialog(et.getText().toString()); 
      return true;     
     } 
    });   
} 

이 Apparentely는 DialogFragment 내부에 나타납니다 대화 상자가 직후에 나타납니다 것으로 보인다 EDITTEXT 을 통해 onLongClick (나는 화면 방향이 활동을 변경할 때 다시 시작되는 것을 알고 있지만, 그것을 만든 처음처럼 정상적으로 시작되지해야합니까?)

내 문제 : 나는 적어도 한 번 열 때 대화 상자와 나는 그것을 닫는다. e 화면 방향 변경 editText를 오랫동안 클릭 한 것처럼 대화 상자가 화면에 다시 표시됩니다.

나는 이런 일이 발생하는 이유를 절대 알지 못합니다. 도움을

public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 
    final Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    LayoutInflater adbInflater = LayoutInflater.from(getActivity()); 

    View eulaLayout = adbInflater.inflate(R.layout.dialog_crypt, null);  
    Button btn_OK = (Button) eulaLayout.findViewById(R.id.btnOK); 
    dialog.setContentView(eulaLayout); 

    final EditText et = (EditText)eulaLayout.findViewById(R.id.editText2); 
    et.setText(textDialog); 

    if(et.length()>0) 
    { 
     et.setText(et.getText().toString() + " "); 
    } 

    et.setSelection(et.length()); 

    btn_OK.setOnClickListener(
      new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        textDialog = et.getText().toString(); 
        ((Main)getActivity()).setTextOnEditText(textDialog); 
        dialog.dismiss(); 
       } 
      }); 
    return dialog; 
} 

정말 고마워요 :

는 또한 대화 조각의 구조를 연결합니다.

+0

getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); 
당신이 대화 조각에 대한 지원 라이브러리를 사용하는 경우

, 또는

그래서 당신은 아무것도하지 않고, 활동을 시작 장치를 회전 대화 상자가 나타납니다 또는 장치를 회전, 글고 치기를 클릭 actitity을 시작 ... ? – nikis

+0

로테이션에서 활동을 다시 시작 하시겠습니까? 활동을 다시 시작하지 못하도록하는 코드를 추가 했습니까? 매니페스트와 같은 구성 변경? –

+0

@nikis no, 죄송합니다, 대화 상자를 열기 전에 화면을 회전해도 아무 일도 일어나지 않습니다. – Gasta87

답변

8

단편화 관리자를 사용하여 스택에서 대화 상자를 제거하지 말고 제거하십시오. 그런데

getFragmentManager().beginTransaction().remove(dialogFragment.this).commit();

, 대신 당신의 대화에 대한 Fragment를 사용하여, 당신은 DialogFragment 자체를 사용해야합니다. 체크 아웃 :. 당신의 조각 정적 내부 클래스가 아닌 또한 DialogFragment

은, 지금까지 (이 같은 ((Main)getActivity()).setTextOnEditText(textDialog); 을 활동 메소드를 호출하지 않는 대신, 조각 및 활동 사이에 이야기하는 interface을 만들

+0

감사합니다! 그것은 작동합니다! – GrafOrlov

+1

이 방법이 효과가 있음을 확인할 수는 있지만,이 문제는'onDismiss' 메소드에'super.onDismiss (dialog);'를 포함하는 것을 잊어 버렸기 때문에 발생했습니다. 아마 이것은 누군가를 도울 것입니다. – Storix

+0

위대한 의견 - Jabbar의 답변에 따라 java.lang.IllegalStateException이 발생했습니다 : onSaveInstanceState 후이 작업을 수행 할 수 없습니다. ' –

0

구성 변경 (예 : 회전)이 발생하면 이전 조각이 파괴되지 않습니다. 다시 작성하면 활동에 다시 추가됩니다 (기본적으로 안드로이드는 조각을 보유합니다). 따라서 회전하기 전에 DialogFragment이 표시된 경우 회전 후 즉시 표시됩니다.

+0

아니요, 회전하기 전에 dialogFragment가 표시되지 않았습니다. 한 번에 한 번 열리고 닫히면 화면이 회전 할 때 다시 나타납니다. – Gasta87

+0

그러나 위에서 말했듯이, "대화 상자를 열기 전에 화면을 회전해도 아무 일도 일어나지 않습니다". 실수는 어디 있습니까? – nikis

+0

다음과 같은 두 가지 경우가 있습니다. 1) 나는 editText를 onLongClick하지 않았습니다. 2) 적어도 한 번 이상 editText를 onLong 클릭하십시오. 첫 번째 경우 화면 방향이 바뀌면 대화 상자가 나타나지 않습니다. 두 번째 경우, 대화 상자가 이미 dialog.dismiss()를 생성하는 OK 버튼을 클릭하여 닫혀있을 때 화면 방향이 마술처럼 바뀌면 대화 상자가 나타납니다 (editLext를 onLongClick하는 경우처럼) – Gasta87

7

을 화면 방향을 변경합니다. onSaveInstanceState 메서드를 호출하고 스택을 포함하는 Bundle 객체에 상태를 저장합니다.이 스택을 지우지 않고 대화 상자를 닫으면 saveInstanceState 번들에 있기 때문에 전화를 돌릴 때 대화 상자가 표시됩니다

다음과 같이 스택에서 대화 상자를 지워야합니다.

getActivity().getFragmentManager().beginTransaction().remove(this).commit();