- 使用Dialog时现在一般用DialogFragment进行封装,而且一般在某个类的内部使用,比如Activity,在内部声明时一般声明为public static final类,放置保存外部Activyt的引用,因为其生命周期在旋转屏幕时会有所不同;
- 基本的应用如下:
- 默认情况下DialogFragment会自动进行保存状态,
public static class MyDialogFragment extends DialogFragment { private static final String Tag = "MyDialog"; private static final String NAME = "NAME"; private String name = null; public static MyDialogFragment newInstance(String name) { MyDialogFragment myDialog = new MyDialogFragment(); Bundle bundle = new Bundle(); bundle.putString(NAME, name); myDialog.setArguments(bundle); return myDialog; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // TODO Auto-generated method stub // return super.onCreateDialog(savedInstanceState); final Context context = getActivity(); name = getArguments().getString(NAME); return new AlertDialog.Builder(context) .setTitle(name) .setPositiveButton("保存", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { } }) .setNegativeButton("放弃", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { } }) .create(); }
- 如果在onCreate()中声明了setRetainInstance(),导致DialogFragment不能重建,就需要重写onDistroyView()方法,如下:
@Override
public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public void onDestroyView() { // TODO Auto-generated method stub if(getDialog() != null && getRetainInstance()) getDialog().setDismissMessage(null); super.onDestroyView(); }
- 状态的获得:
getArguments().getString(NAME);
- Fragment也通常用作异步任务的保存,这个要手动设置setRetainInstance()让系统记录Fragment状态
DialogFragment setRetainInstance
最新推荐文章于 2025-05-04 11:21:42 发布