2017-07-19 10 views
0

Androidで、私はTimePickerダイアログでEditTextを設定しました。デフォルトの時間になりましたが、TimePicker時間の変更を使用しています。Android TimePickerの問題

私は3つの問題があります時々のEditText変更しないで時間をdisplayng、

1)別の時間を選択します。

2)私がTimePickerを使って同じ時間を選択すると、+ 12時間(例えば今は09.35ですが、21.35を表示します)に変わります。

3)私は時間> = 17.00を選択した場合、私は例外だ:これは私のTimePicker機能である

07-19 11:47:17.574 16224-16224/com.example.myapp E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.myapp, PID: 16224 
                     java.lang.ArrayIndexOutOfBoundsException: length=17; index=18 
                      at java.util.Calendar.set(Calendar.java:1122) 
                      at com.example.myapp.activities.MyActivity$9.onTimeSet(MyActivity.java:513) 
                      at android.app.TimePickerDialog.onClick(TimePickerDialog.java:133) 
                      at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:160) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5376) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 

を:

// TimePicker settings 
public void setTimeFields(final EditText editText) { 
    // Calendar instance 
    final Calendar calendar = Calendar.getInstance(); 
    // TimePicker definition 
    TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      calendar.set(hourOfDay, minute); 
      editText.setText(new SimpleDateFormat("HH:mm", Locale.ITALIAN).format(calendar.getTime())); 
     } 
    }, calendar.get(Calendar.HOUR), calendar.get(Calendar.MINUTE), DateFormat.is24HourFormat(this)); 
    // Show dialog 
    timePickerDialog.show(); 
} 

そして、ここに私のeditext定義:

etxTime = (EditText) findViewById(R.id.etxTime); 
etxTime.setInputType(InputType.TYPE_NULL); 
etxTime.setText(new SimpleDateFormat("HH:mm", Locale.ITALIAN).format(Calendar.getInstance().getTime())); 
etxTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setTimeFields(etxTime); } }); 

どこが間違っていますか? "日付"、 "時間" ボタンと "set_date"、 "SET_TIME" です

答えて

0
date.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      // Show Date dialog 
      showDialog(Date_id); 
     } 
    }); 
    time.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      // Show time dialog 
      showDialog(Time_id); 
     } 
    }); 
} 

protected Dialog onCreateDialog(int id) { 

    // Get the calander 
    Calendar c = Calendar.getInstance(); 

    // From calander get the year, month, day, hour, minute 
    int year = c.get(Calendar.YEAR); 
    int month = c.get(Calendar.MONTH); 
    int day = c.get(Calendar.DAY_OF_MONTH); 
    int hour = c.get(Calendar.HOUR_OF_DAY); 
    int minute = c.get(Calendar.MINUTE); 

    switch (id) { 
     case Date_id: 

      // Open the datepicker dialog 
      return new DatePickerDialog(MainActivity.this, date_listener, year, 
        month, day); 
     case Time_id: 

      // Open the timepicker dialog 
      return new TimePickerDialog(MainActivity.this, time_listener, hour, 
        minute, false); 

    } 
    return null; 
} 

// Date picker dialog 
DatePickerDialog.OnDateSetListener date_listener = new DatePickerDialog.OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int year, int month, int day) { 
     // store the data in one string and set it to text 
     String date1 = String.valueOf(month) + "/" + String.valueOf(day) 
       + "/" + String.valueOf(year); 
     set_date.setText(date1); 
    } 
}; 
TimePickerDialog.OnTimeSetListener time_listener = new TimePickerDialog.OnTimeSetListener() { 

    @Override 
    public void onTimeSet(TimePicker view, int hour, int minute) { 
     // store the data in one string and set it to text 
     String time1 = String.valueOf(hour) + ":" + String.valueOf(minute); 
     set_time.setText(time1); 
    } 
}; 

この場合editTextsです。

+0

あなたの提案として私は変更しました 'calendar.set(hourOfDay、minute);editText.setText(新しいSimpleDateFormat( "HH:mm"、Locale.ITALIAN).format(calendar.getTime())); ' 〜 ' calendar.set(hourOfDay、minute); editText.setText(String.valueOf(hourOfDay)+ ":" + String.valueOf(minute)); ' これは私のために1)と2)の問題を解決しますが、3)持続します。 私は 'calendar.set(hourOfDay、minute);'という行を削除します。正常に動作します。 ありがとうございました。とにかく、なぜ 'calendar.set(hourOfDay、minute);' java.lang.ArrayIndexOutOfBoundsExceptionを作成しますか? – Fedro

+0

私はなぜそれが例外をスローしているのか分からない。とにかく私の解決策が正しいと思うなら、私の答えを正しいものとして受け入れてください。 –