当用户界面中的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");
}
}
});
}
答案 0 :(得分:4)
您是否使用viewPager或只是将片段添加到您的活动中?一种方法是将要保留的数据保存到onSaveInstanceState(Bundle outState)
包中,然后使用
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();
}
答案 1 :(得分:3)
如果我是你,而不是使用OnClickListener
我会使用EditText
在点击EditText
时显示片段,并使android:configChanges="orientation"
无法调焦。
对于方向更改,值得注意的是,您可以通过将清单上的{{1}}添加到相关活动来阻止对活动生效的配置更改。不确定这在你的情况下是否有帮助,但你可以看看。