我有一个 DialogFragment
,其中在构造函数中声明了一个整数:
public class MyDialogFragment extends DialogFragment {
private int myInt;
}
我在这里设置整数:
private void setInt(int i) {
myInt = i;
Log.d("setting int", Integer.toString(myInt)); // logs proper value
}
setDate()
在监听器上调用:
private Dialog.OnSetListener l = new <>.OnSetListener() {
@Override
public void onSet(int arg1) { //arg1 is coming from the dialog
setInt(arg1);
}
}
现在,当使用整数创建对话框时,它会保留实例化值 (0) 而不是 setInt
中设置的值:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Log.d("onCreateDialog", Integer.toString(myInt); // Always 0
}
总而言之,日志是这样的:
// first dialog creation (for @cybersam)
onCreateDialog: 0
// After picking 9 in the dialog
setting int: 9
// onCreateDialog:
onCreateDialog: 0
我做错了什么?请帮忙。
编辑:
完整的例子:
public class DatePickerDialogFragment extends DialogFragment {
private int myInt;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Log.d("onCreateDialog", Integer.toString(myInt));
return new DatePickerDialog(getActivity(), listener, 2012, 12, myInt);
}
private DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
// arg1 = year
// arg2 = month
// arg3 = day
setDate(arg1, arg2, arg3);
}
};
private void setDate (int y, int m, int d) {
myInt = d;
Log.d("setInt", Integer.toString(myInt));
}
}
最佳答案
您应该使用 bundle args 而不是尝试设置变量 - 使用 args 可以避免很多状态问题(重新创建 fragment 等)。
private static final String INT_ARG = "int_arg";
public static MyDialogFragment newInstance(int arg)
{
Bundle args = new Bundle();
args.putInt(INT_ARG, arg);
MyDialogFragment fragment = new MyDialogFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args != null)
{
myInt = args.getInt(INT_ARG);
}
}
当你想显示对话框时:
MyDialogFragment myFrag = MyDialogFragment.newInstance(mInt);
myFrag.show(getSupportFragmentManager(), "dialog");
关于java - private int 在设置后不保留其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34687376/