如何避免在方向更改时启动片段?

时间:2015-10-01 03:02:54

标签: android android-fragments focus android-datepicker

当用户界面中的EditText行获得焦点时,会启动DatePickerFragment以便用户输入日期。在方向更改时,如果EditText行具有焦点和先前输入的日期(length()> 0)并且由于以下代码而启动DatePickerFragment。在方向更改后,我不希望DatePickerFragment启动。有没有办法修改或添加代码,这样如果Activity是新创建的并且EditText行有焦点,它就不会自动启动DatePickerFragment?在onResume()做某事是不是一个好主意?或者对!=null做些什么?

ListenerEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
     @Override
     public void onFocusChange(View v, boolean hasFocus) {
     ...
        if (hasFocus && (fListenerEditText.getText().length() == 0)) {
           DatePickerFragment newFragment = new DatePickerFragment();
           newFragment.show(getSupportFragmentManager(), "datePicker");
        }
        else if (hasFocus) {
           ...
           DatePickerFragment newFragment = new DatePickerFragment();
           newFragment.show(getSupportFragmentManager(), "datePicker");
        }
     }
});

2 个答案:

答案 0 :(得分:0)

如果requestFocus()移除了Edittext,也可以选择此类内容;在界面外移动以下行

DatePickerFragment newFragment = new DatePickerFragment();

并在界面内部进行布尔攻击

if(newFragment.isShow())// true if shown false if not

你的if语句以这种方式检查

if&只有当EditText具有焦点并且长度为0时才显示对话框,或者如果它具有焦点显示对话框,则此处不会大于0

希望我帮助

答案 1 :(得分:0)

在添加新的DatePickerFragment之前检查是否已存在。如果它不存在,则继续并添加DatePickerFragment。我假设“datePicker”是用于片段事务的标记。您可以使用

检查片段
if (getSupportFragmentManager().findFragmentByTag("datePicker")==null) {
   //Add new DatePickerFragment
}

如果有帮助,请告诉我。