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)
非常感谢帮忙.
尝试使用片段管理器从堆栈中删除对话框,而不是仅仅解除它.
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)
| 归档时间: |
|
| 查看次数: |
2635 次 |
| 最近记录: |