我如何处理方向更改以使片段无法加载?
How can I handle Orientation change so Fragment doesn't load?
当 UI 中的 EditText
行获得焦点时,会启动 DatePickerFragment
供用户输入日期。
方向改变时,如果 EditText
行有焦点和之前输入的日期(因此 length() > 0
),我不希望片段自动显示。
有没有办法修改或添加代码,以便如果 Activity 是新创建的并且 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");
}
}
});
}
您是使用 viewPager 还是只是将片段添加到 activity?一种方法是将要在旋转时保持的数据保存到 onSaveInstanceState(Bundle outState)
包中,然后使用
在 onCreate 中恢复该数据
if(savedInstanceState != null) {
//get your data
}
或者仅在加载 activity 时添加您的片段(在设备旋转后不重新加载)
if(savedInstanceState == null)
{
mFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
YourFragment fragment = new YourFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
无论如何你一定要检查 this and this 个问题,它们可能会有帮助。
如果我是你,我不会使用 OnFocusChangeListener
,而是使用 OnClickListener
在单击 EditText
时显示片段,并使 EditText
非可聚焦。
对于方向更改,值得注意的是,您可以通过在清单上向相关 activity 添加 android:configChanges="orientation"
来防止配置更改对 activity 生效。虽然不确定这对您的情况是否有帮助,但您可以看看。
当 UI 中的 EditText
行获得焦点时,会启动 DatePickerFragment
供用户输入日期。
方向改变时,如果 EditText
行有焦点和之前输入的日期(因此 length() > 0
),我不希望片段自动显示。
有没有办法修改或添加代码,以便如果 Activity 是新创建的并且 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");
}
}
});
}
您是使用 viewPager 还是只是将片段添加到 activity?一种方法是将要在旋转时保持的数据保存到 onSaveInstanceState(Bundle outState)
包中,然后使用
if(savedInstanceState != null) {
//get your data
}
或者仅在加载 activity 时添加您的片段(在设备旋转后不重新加载)
if(savedInstanceState == null)
{
mFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
YourFragment fragment = new YourFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
无论如何你一定要检查 this and this 个问题,它们可能会有帮助。
如果我是你,我不会使用 OnFocusChangeListener
,而是使用 OnClickListener
在单击 EditText
时显示片段,并使 EditText
非可聚焦。
对于方向更改,值得注意的是,您可以通过在清单上向相关 activity 添加 android:configChanges="orientation"
来防止配置更改对 activity 生效。虽然不确定这对您的情况是否有帮助,但您可以看看。