如何处理方向更改以便Fragment不加载?

AJW*_*AJW 5 android android-datepicker android-fragments

EditTextUI中的一行获得焦点时,将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");
    }
 }
});
}
Run Code Online (Sandbox Code Playgroud)

Iva*_*n V 4

您使用 viewPager 还是只是将片段添加到您的活动中?一种方法是将要在旋转时维护的数据保存到onSaveInstanceState(Bundle outState)捆绑包中,然后使用 onCreate 恢复该数据

 if(savedInstanceState != null) {
   //get your data
 }
Run Code Online (Sandbox Code Playgroud)

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

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

    YourFragment fragment = new YourFragment();

    fragmentTransaction.add(R.id.fragment_container, fragment);
    fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)

无论如何,你一定要检查一下这个这个问题,它们可能会有所帮助。