0

こんにちは、Android 開発は初めてです。timePicker から時間と分を取得する必要があるアプリを開発しているので、取得するために次のようにしました。

public class MainActivity extends Activity {

TimePicker timePicker;
 int hour, changedHour;
 int minute, changedMinute;
TextView tv, tv1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView) findViewById(R.id.textView1);
    tv1 = (TextView) findViewById(R.id.textView2);
    timePicker = (TimePicker) findViewById(R.id.timePicker1);
    setCurrentTime();
    timePicker.setOnTimeChangedListener(new OnTimeChangedListener() {

        @Override
        public void onTimeChanged(TimePicker arg0, int hourOfDay,
                int minuteOf) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "Time set!",
                    Toast.LENGTH_SHORT).show();
            changedHour = hourOfDay;
            changedMinute = minuteOf;

            tv.setText("Hour of Day is " + changedHour + " and Minute is "
                    + changedMinute);
        }

    });
    tv1.setText("Hour of Day is " + changedHour + " and Minute is "
                    + changedMinute);
}

public void setCurrentTime() {
    // TODO Auto-generated method stub
    final Calendar c = Calendar.getInstance();

    hour = c.get(Calendar.HOUR_OF_DAY);
    minute = c.get(Calendar.MINUTE);

    timePicker.setCurrentHour(hour);
    timePicker.setCurrentMinute(minute);

}`

問題はここにあります

changedHour = hourOfDay;
            changedMinute = minuteOf;

            tv.setText("Hour of Day is " + changedHour + " and Minute is "
                    + changedMinute);

私は変更された時間を取得しhourOfDay = changedHour、変数を使用しようとしているときにメソッドの外で時間と分が同じになるように設定しました。問題はここで0に設定されています

tv1.setText("Hour of Day is " + changedHour + " and Minute is "
            + changedMinute);

私を助けてください!

4

1 に答える 1

0

changedHourを使用して出力する前に、またはchangedMinute変数に実際に割り当てることtv1.setTextonTimeChangedありません。このため、他に何も割り当てられていないため、デフォルト値は 0 になります。

とにかく、void関数から値を返すことはできません。定義上、void型の欠如です。

これを修正する方法は、コードをどの程度正確に機能させたいかによって異なります。抵抗が最も少ない方法は、 set changedHourand changedMinutefrom withinsetCurrentTimeです。たとえば、

public void setCurrentTime() {
    // TODO Auto-generated method stub
    final Calendar c = Calendar.getInstance();

    hour = c.get(Calendar.HOUR_OF_DAY);
    minute = c.get(Calendar.MINUTE);

    // NEW CODE
    changedHour = hour;
    changedMinute = minute;
    // END NEW CODE

    timePicker.setCurrentHour(hour);
    timePicker.setCurrentMinute(minute);

}

他のメカニズム (構造体を返すか、out パラメーターを使用する) を介して時間と分を返すこともできchangedHour/Minuteますが、コールバックで更新することを考えるとonTImeChanged、おそらく既存のフローにはうまく適合しません。

ただし、再読すると、これはすべて、で間違った変数を使用していることが原因である可能性がありますtv1.setText。クラス変数hourに andminuteを代入するので、 andではsetCurrentTimeなくそれらを出力できます。changedHourchangedMinute

tv1.setText("Hour of Day is " + hour + " and Minute is "
                + minute);
于 2014-05-15T08:45:54.660 に答える