dra*_*sia 91 android dialog onconfigurationchanged android-edittext
我试图阻止在重新启动活动时关闭使用"警报"构建器构建的对话框.
如果我重载onConfigurationChanged方法,我可以成功地执行此操作并重置布局以更正方向,但我丢失了edittext的粘性文本功能.所以在解决对话问题时我创建了这个edittext问题.
如果我从edittext中保存字符串并在onCofiguration更改中重新分配它们,它们似乎仍然默认为初始值而不是在旋转之前输入的值.即使我强制使用无效似乎也会更新它们.
我真的需要解决对话问题或编辑文本问题.
谢谢您的帮助.
Bra*_*bin 126
现在避免这个问题的最好方法是使用a DialogFragment.
创建一个扩展的新类DialogFragment.覆盖onCreateDialog并返回旧的Dialog或AlertDialog.
然后你可以用它来显示它DialogFragment.show(fragmentManager, tag).
这是一个例子Listener:
public class MyDialogFragment extends DialogFragment {
public interface YesNoListener {
void onYes();
void onNo();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!(activity instanceof YesNoListener)) {
throw new ClassCastException(activity.toString() + " must implement YesNoListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.dialog_my_title)
.setMessage(R.string.dialog_my_message)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((YesNoListener) getActivity()).onYes();
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((YesNoListener) getActivity()).onNo();
}
})
.create();
}
}
Run Code Online (Sandbox Code Playgroud)
在您调用的活动中:
new MyDialogFragment().show(getSupportFragmentManager(), "tag"); // or getFragmentManager() in API 11+
Run Code Online (Sandbox Code Playgroud)
这个答案有助于解释其他三个问题(及其答案):
小智 44
// Prevent dialog dismiss when orientation changes
private static void doKeepDialog(Dialog dialog){
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
dialog.getWindow().setAttributes(lp);
}
Run Code Online (Sandbox Code Playgroud)
public static void doLogout(final Context context){
final AlertDialog dialog = new AlertDialog.Builder(context)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.titlelogout)
.setMessage(R.string.logoutconfirm)
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
...
}
})
.setNegativeButton("No", null)
.show();
doKeepDialog(dialog);
}
Run Code Online (Sandbox Code Playgroud)
如果您在更改方向时更改布局,我不会将其放入android:configChanges="orientation"清单中,因为无论如何您都在重新创建视图。
使用以下方法保存活动的当前状态(如输入的文本、显示的对话框、显示的数据等):
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
这样,活动再次通过 onCreate,然后调用 onRestoreInstanceState 方法,您可以在其中再次设置 EditText 值。
如果你想存储更复杂的对象,你可以使用
@Override
public Object onRetainNonConfigurationInstance() {
}
Run Code Online (Sandbox Code Playgroud)
在这里您可以存储任何对象,而在 onCreate 中,您只需调用getLastNonConfigurationInstance();即可获取对象。
| 归档时间: |
|
| 查看次数: |
53961 次 |
| 最近记录: |