屏幕方向改变后,dialogFragment显然没有任何调用

Gas*_*a87 9 android screen-orientation oncreate android-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;                
        }
    });        
}
Run Code Online (Sandbox Code Playgroud)

显然,似乎在DialogFragment中出现的对话框应该出现在onLongClick之后的editText上(我知道当屏幕方向改变时Activity重新启动,但它不应该像第一次创建时那样正常启动? )

我的问题:当我至少打开一次对话框并关闭它时,屏幕方向改变之后我再次在屏幕上显示对话框,就像我长按了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;
}
Run Code Online (Sandbox Code Playgroud)

非常感谢帮忙.

Jab*_*iyo 8

尝试使用片段管理器从堆栈中删除对话框,而不是仅仅解除它.

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

顺便说Fragment一下,您应该使用DialogFragment自己,而不是仅使用对话框.Checkout:DialogFragment

此外,不要像这样调用您的活动方法( ((Main)getActivity()).setTextOnEditText(textDialog); 除非您的片段是静态内部类.而是创建interface片段和活动之间的对话.


小智 7

当屏幕改变方向时,它调用onSaveInstanceState方法,并将状态保存在包括堆栈的Bundle对象中.如果在不清除此堆栈的情况下关闭对话框,则在旋转手机时会显示该对话框,因为它位于saveInstanceState包中.

您必须清除堆栈中的对话框:

getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();
Run Code Online (Sandbox Code Playgroud)

如果您对对话框片段使用支持库,或

getActivity().getFragmentManager().beginTransaction().remove(this).commit();
Run Code Online (Sandbox Code Playgroud)