jfo*_*ato 8 android android-lifecycle android-fragments
我正在使用DialogFragment在onCreateDialog()中返回DatePickerDialog.我已将dateSetListener设置为DialogFragment(下面的示例中为"this"),除了在屏幕旋转发生时调用onDateSet()时,一切正常,这是不可取的.如何在旋转屏幕时让onDateSet不被调用?
我的DialogFragment
public static class DateDialogFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener{
public static DateDialogFragment newInstance() {
return new DateDialogFragment();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(getActivity(), this, 2012, 11, 19);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
//This is called when screen rotated, which I dont want
Toast.makeText(getActivity(), "Year: "+year+" Month: "+monthOfYear+" Day: "+dayOfMonth, Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我所说的
if(getActivity()!=null){
FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment newFragment = DateDialogFragment.newInstance();
newFragment.show(fm, "dialog");
}
Run Code Online (Sandbox Code Playgroud)
在onDateSet
方法中,Activity
使用Activity :: isChangingConfigurations检查是否由于配置更改而重新启动.如果是,则不显示Toast
.
@Override
public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if( ! this.getActivity().isChangingConfigurations() ) {
// Dialog is dismissed by user explicitly, hence show the Toast message.
Toast.makeText(getActivity(), "Year: "+year+" Month: "+monthOfYear+" Day: "+dayOfMonth, Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经测试过并且完美无缺.如果需要任何进一步的帮助,请告诉我.
Ril*_*n42 -1
当屏幕旋转时,活动被销毁并重新创建,这每次都会创建一个新的片段。避免此问题的一种方法是更改代码中 if(getActivity()!=null) 语句的位置。将其放置在不受活动重新创建影响的位置(不在 OnCreate 方法中)。
归档时间: |
|
查看次数: |
1564 次 |
最近记录: |