同志们好。有一个fragment dialog(一个单独的类)是通过接口创建的,通过点击listView中的一个item(点击在adapter中处理,在activity中调用接口)。数据被传递到这个对话框(用于编辑和保存到数据库)。旋转手机时如何保存对话框的状态?更准确地说,我像这样保存对话框本身的状态:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if (builder != null) {
savedInstanceState.putBoolean("showDialog", true);
savedInstanceState.putString("id", String.valueOf(id));
savedInstanceState.putString("key", key);
if (!String.valueOf(posTextView.getText()).equals("")) {
savedInstanceState.putDouble("posTextView", Double.parseDouble(String.valueOf(posTextView.getText())));
} else {
savedInstanceState.putDouble("posTextView", 0);
}
if (!String.valueOf(priceTextView.getText()).equals("")) {
savedInstanceState.putDouble("priceTextView", Double.parseDouble(String.valueOf(priceTextView.getText())));
} else {
savedInstanceState.putDouble("priceTextView", 0);
}
savedInstanceState.putLong("dateLong", resultDate);
} else {
savedInstanceState.putBoolean("showDialog", false);
}
}
我恢复
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
setRetainInstance(true);
if (savedInstanceState != null && savedInstanceState.getBoolean("showDialog")) {
this.id= savedInstanceState.getInt("id");
this.key= savedInstanceState.getString("key");
this.quantity = savedInstanceState.getDouble("posTextView");
this.price = savedInstanceState.getDouble("priceTextView");
this.dateLong = savedInstanceState.getLong("dateLong");
}
旋转后如何在活动中调用包含此数据的对话框?除非旧的已关闭,否则不会创建新的。对话框构造函数(即使在恢复数据后也需要上下文,否则为 nullPointerException)
public EditPortfolioDialogFragment newInstance(Integer id, String key, double quantity, double price, long dateLong,
boolean buy, Context context, PortfolioItemSaveListener portfolioItemSaveListener) {
EditPortfolioDialogFragment dialogFragment = new EditPortfolioDialogFragment();
this.coinId = id;
if (key != null) {
this.key = key;
this.oldKey = key;
} else {
this.key = "abc";
}
this.quantity = quantity;
this.price = price;
this.dateLong = dateLong;
this.context = context;
this.portfolioItemSaveListener = portfolioItemSaveListener;
return dialogFragment;
}
理论上,通过
onCreate将此添加到方法中,应该可以解决问题。