2015-10-02 8 views
5

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"); 
    } 
} 
}); 
} 

答えて

4

viewPagerを使用しているのか、またはフラグメントをアクティビティに追加していますか?一つの方法は、

あなたが onSaveInstanceState(Bundle outState)バンドルに回転に維持し、その後

if(savedInstanceState != null) { 
    //get your data 
} 

または単にを使用してのonCreate内のデータは、活動は(デバイスの回転の後に再ロードされません)ロードされた場合にのみ、あなたのフラグメントを追加することを復元したいデータを保存することです

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

    YourFragment fragment = new YourFragment(); 

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

とにかくthisthisクエストオンをチェックしてください。役立つかもしれません。

+0

こんにちは、アクティビティにフラグメントを追加するだけです。上記を編集してアクティビティを表示します。 – AJW

+0

私はDatePickerDialogを使用していますので、show(getSupportFragmentManager)はfragmenttransactionsを行います。 "if(savedInstanceState == null)"行は、savedInstanceSateがnullでないときにフラグメントを追加しないように解釈することもできます。これは、デバイスのローテーション後にtrueになりますか? – AJW

+0

はい、デバイスのローテーションがケースの場合、outStateバンドルにデータを保存しなくても、savedInstenceStateはnullになりません –

3

私の代わりに私がEditTextがクリックされるたびにフラグメントを示し、EditText非フォーカス可能を作るためにOnClickListenerを使用するOnFocusChangeListenerを使用して、あなただったら。

オリエンテーションの変更については、マニフェストにandroid:configChanges="orientation"を関連するアクティビティに追加することで、アクティビティに影響を与える構成の変更を防ぐことができます。しかし、これがあなたのケースで役立つかどうかは分かりませんが、あなたは一見できます。

+0

android:configChanges = "orientation"を追加すると、再起動を防ぐことができます。しかし、全体の活動ではなく、フラグメントが再作成されないようにする必要がある場合にはうまくいきません –

+0

あなたのご注意ありがとうございます。しかし、一部のユーザーは、EditTextのマウスクリックではなくタブキーを使用できるキーボードを持っています。私が非フォーカス可能にすると、ユーザーはタブキーを使ってEditTextにフォーカスを移動することができなくなります。 – AJW

+0

私のアクティビティには、あなたが推奨するように、OnClickListenerコードもあります。ありがとう! – AJW

関連する問題