2016-05-09 17 views
0

私はAndroidアプリのアクティビティでいくつかのEditTextを取得しました。日付を選択するためのものは完全に正常に動作し、日付ピッカーのダイアログが表示され、日付を選択し、その日付がそのEditTextに設定されます。問題はありません。日付ピッカーが間違った編集テキストで再び開きます

後でという別のEditTextを開いて、テキスト(「leggtil」という名前)を入力すると、日付ピッカーダイアログが再度表示されるという問題があります。誰が何が間違っているのか分かりますか?フォーカスが最初のEditTextから削除されたときに起因するsetOnFocusChangeListenerメソッドが呼び出される示す第二のEditTextクリック日付ピッカーで

private DatePickerDialog velgdato; 
private SimpleDateFormat dateFormat; 
private EditText dato; 
private Calendar mycalendar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_lag_liste); 

    dato = (EditText)findViewById(R.id.laglistedato);  
    final EditText leggtil = (EditText)findViewById(R.id.laglisteadditem); 

    mycalendar = Calendar.getInstance(); 
    final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
      mycalendar.set(Calendar.YEAR, year); 
      mycalendar.set(Calendar.MONTH, monthOfYear); 
      mycalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
      oppdater(); 
     } 
    }; 

    dato.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      new DatePickerDialog(LagListe.this, date, mycalendar.get(Calendar.YEAR), mycalendar.get(Calendar.MONTH), mycalendar.get(Calendar.DAY_OF_MONTH)).show(); 
     } 
    }); 

    leggtil.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (leggtil.getText().toString() != null) { 

       Toast.makeText(getApplicationContext(), leggtil.getText().toString(), Toast.LENGTH_SHORT).show(); 

      return true; 
      } 

      else 
       return false; 
     } 
    }); 
    } 

    private void oppdater() { 
    String format = "MM/dd/yy"; 
    SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US); 

    dato.setText(sdf.format(mycalendar.getTime())); 

} 

答えて

1

問題であるあなたは毎回ビューフォーカスと呼ばれるonFocusChangeListenerを、設定していること焦点が合っていることと焦点が外れていることの両方に変化する。試してみてください:

dato.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if(hasFocus){ 
      new DatePickerDialog(LagListe.this, date, mycalendar.get(Calendar.YEAR), mycalendar.get(Calendar.MONTH), mycalendar.get(Calendar.DAY_OF_MONTH)).show(); 
     } 
    } 
}); 
0

:私はここに関連するすべてのコードを紹介します。

追加する場合onFocusChange内部の状態やショーの日付ピッカーのみ焦点が変化するように第一のEditTextにある場合onFocusChange方法として:

@Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if(v.getId()==R.id.laglistedato){ 
      new DatePickerDialog(LagListe.this, date, 
           mycalendar.get(Calendar.YEAR), 
           mycalendar.get(Calendar.MONTH), 
        mycalendar.get(Calendar.DAY_OF_MONTH)).show(); 
      }else{ 
       // do nothing... 
      } 
     } 
+0

ありがとうございました。問題が修正されました。 :) 私は今、 'レグチル' EditTextで新しい問題を抱えています。別の質問として投稿するべきかもしれませんが、あなたがバットをすぐに知っているなら、助けてください。 ^^それは本当に奇妙なことですが、バックスペースをクリックするとトーストが表示され、トーストは決して画面から離れませんか?トーストはテキストだけで何かをする前のテストですが、それでも問題はないことを知る必要があります。 – OhDannyBoy

+1

@OhDannyBoy:onKeyメソッドは、ユーザがキーボードの任意のキーを押すたびに実行されます。トーストメッセージは常に表示されます。トーストメッセージを表示したいときは? –

+0

ああ、それは理にかなっています。Duh、私はそれを知っていたはずです。とにかく、ユーザーが自分のものを入力し終わったら、トーストを表示して、Enterアイコンをクリックします。私は代わりに 'onClickListener'を使うべきですか? – OhDannyBoy