UIの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");
}
}
});
}
こんにちは、アクティビティにフラグメントを追加するだけです。上記を編集してアクティビティを表示します。 – AJW
私はDatePickerDialogを使用していますので、show(getSupportFragmentManager)はfragmenttransactionsを行います。 "if(savedInstanceState == null)"行は、savedInstanceSateがnullでないときにフラグメントを追加しないように解釈することもできます。これは、デバイスのローテーション後にtrueになりますか? – AJW
はい、デバイスのローテーションがケースの場合、outStateバンドルにデータを保存しなくても、savedInstenceStateはnullになりません –