如何处理方向更改以便片段无法加载?

时间:2015-10-02 07:27:40

标签: android android-fragments android-datepicker

当用户界面中的EditText行获得焦点时,会启动DatePickerFragment以便用户输入日期。

在方向更改时,如果EditText行具有焦点和之前输入的日期(以便length() > 0),我不希望片段自动显示。

有没有办法修改或添加代码,以便在新创建活动且EditText行有焦点时,它不会自动启动DatePickerFragment

onResume()中做某事是不是一个好主意?

或使用savedInstanceState()!=null执行某些操作?

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

2 个答案:

答案 0 :(得分:4)

您是否使用viewPager或只是将片段添加到您的活动中?一种方法是将要保留的数据保存到onSaveInstanceState(Bundle outState)包中,然后使用

在onCreate中恢复该数据
 if(savedInstanceState != null) {
   //get your data
 }

或仅在加载活动时添加片段(在设备旋转后不重新加载)

if(savedInstanceState == null) 
{
    mFragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();

    YourFragment fragment = new YourFragment();

    fragmentTransaction.add(R.id.fragment_container, fragment);
    fragmentTransaction.commit();
}

无论如何,你一定要检查thisthis questons,它们可能会有所帮助。

答案 1 :(得分:3)

如果我是你,而不是使用OnClickListener我会使用EditText在点击EditText时显示片段,并使android:configChanges="orientation"无法调焦。

对于方向更改,值得注意的是,您可以通过将清单上的{{1}}添加到相关活动来阻止对活动生效的配置更改。不确定这在你的情况下是否有帮助,但你可以看看。