2017-07-09 11 views
-1

私は、ユーザーが何らかのデータを入力するUIにいくつかのEditText行を持っています。ユーザーは、fListenerEditText行にDatePickerフラグメントのDateを入力します。フォーカスは、cListenerEditTextである最初のEditText行に戻されます。デフォルトの[戻る]ボタンの動作では、ユーザーが[戻る]ボタンを押すと、アクティビティが終了し、日付データがすぐに失われ、ユーザーは前のアクティビティに戻ります。android:Backボタンを上書きするにはどうしたらいいですか?

私の場合、fListenerEditTextで以前に入力した日付を破棄したいかどうかをユーザーに尋ねるDialogフラグメントを起動したいと思います。ユーザが「OK」ボタンをクリックすると、データは破棄され、アクティビティは閉じられ、ユーザは前のアクティビティに戻る。私の場合は、ユーザーが戻るボタンのキーを押したときにソフトキーボードが開いていないことに注意してください。

FocusListenerと戻るボタンリスナーを一緒に使用するにはどうすればよいですか?私はここで何が欠けていますか?

public class EditActivity extends AppCompatActivity { 

    private ListenerEditText cListenerEditText, dListenerEditText, eListenerEditText, fListenerEditText; 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(layout.activity_edit); 

    cListenerEditText = (ListenerEditText) findViewById(id.CEditText); 
    dListenerEditText = (ListenerEditText) findViewById(id.DEditText); 
    eListenerEditText = (ListenerEditText) findViewById(id.EEditText); 
    fListenerEditText = (ListenerEditText) findViewById(id.FEditText); 

    final int stringDueDate = fListenerEditText.getText().toString().replace(" ", "").length(); 

    cListenerEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus && fListenerEditText.getText().length() > 0) { 
      // add some type of Back button listener here.  
      } 
     } 
    }); 

答えて

1
  1. オーバーライドメソッドonBackPressed()フィールドfListenerEditTextの入力長を確認してください。 0が表示されていない場合は、〜finishアクティビティを呼び出すと、アクティビティスタックのpreviousが表示されます。

  2. OKボタンをクリックした場合は、EditActivityと入力してください。

更新以下のようにEditActivity:FYI

​​

あなたが焦点に応じて、余分な操作をしたい場合は、ピントを確認するためにcListenerEditText.hasFocus()を使用して、ピッキング後にフォーカスを変更します日付はcListenerEditText.requestFocus()fListenerEditText.clearFocus()です。

希望これは〜

+0

ニース。私が何らかの理由でフォーカスがcListenerEditText行にあり、fListenerEditText行ではなく、ユーザーが「戻る」ボタンを押したときに、何とか処理する必要があることだけです。だから私は、cListernerEditTextのFocusListenerが必要とfListenerEditTextの長さをテストします。どのように達成するための任意の考え? – AJW

+0

更新された回答を確認してください。使用条件: 'if(cListenerEditText.hasFocus()&& fListenerEditText.getText()。toString()。length()> 0){......}' – FAT

+0

よろしいですか。またonCreate()セクションにonBackPressed()を追加しないでください。アクティビティーの主要部分を追加するだけですか? – AJW

1

あなたは、ユーザーが変更を破棄またはOnBackpress(でそれらを保つために望んでいるかどうかを確認する新しいダイアログを表示することができます)onOptionSelected()

cListenerEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus && fListenerEditText.getText().length() > 0) { 
      // add some type of Back button listener here. 
       onBackPressed() 
      } 
     } 
    }); 

@Override 
public void onBackPressed() { 
    new AlertDialog.Builder(this) 
     .setTitle("Your dialog title") 
     .setMessage("Do you want to discard the old changes") 
     .setNegativeButton("No", new OnClickListener(){ 
      public void onClick(){ 
      // your task 
      } 
     }) 
     .setPositiveButton("yes", new OnClickListener() { 

      public void onClick(DialogInterface arg0, int arg1) { 
       EditActivity.super.onBackPressed(); 
      } 
     }).create().show(); 
} 
+0

はい役立ちますが、cListenerEditTextにフォーカスがある場合にのみ処理されるように、どこでonBackPressedコードを置けばいいとstringDueDate> 0? – AJW

+0

if条件からonBackPressedを呼び出します。更新された答えを確認してください。 – Ritesh

+0

cListenerEditText.setOnFocusChangeListenerはonCreate()セクションにあります。 onBackPressed()をonCreate()セクションに配置するのか、それともそのアクティビティのメインセクションに配置するのですか? – AJW

関連する問題