Sarah Miller Ответов: 2

Android studio-создание трех независимых временных прядильщиков на одной странице.


Всем Привет,

Пожалуйста, кто-нибудь может мне помочь?

Я уже несколько дней борюсь за то, чтобы заставить три независимо работающих Хронометра работать на одной странице в моем приложении Android Studio.

В настоящее время я даже не могу заставить эти два Хронометра работать независимо друг от друга, и я просто не понимаю, почему.

Любой совет был бы очень признателен.

Сара

Что я уже пробовал:

import java.util.Calendar;

import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TimePicker;

public class MainActivity extends AppCompatActivity implements OnClickListener {

    private EditText time1Text, time2Text;

    private int mHour, mMinute;

    private TimePickerDialog time1TimePickerDialog;
    private TimePickerDialog time2TimePickerDialog;

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

        time1Text = (EditText) findViewById(R.id.etTime1);
        time1Text.setInputType(InputType.TYPE_NULL);
        time1Text.requestFocus();

        time2Text = (EditText) findViewById(R.id.etTime2);
        time2Text.setInputType(InputType.TYPE_NULL);

        time1Text.setOnClickListener(this);
        time2Text.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        // Get Current Time
        final Calendar c = Calendar.getInstance();
        mHour = c.get(Calendar.HOUR_OF_DAY);
        mMinute = c.get(Calendar.MINUTE);

        // Launch Time Picker Dialog
        time1TimePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

                time1Text.setText(hourOfDay + ":" + minute);
                    }
                }, mHour, mMinute, false);
        time1TimePickerDialog.show();
    }
}

Richard MacCutchan

Ваш код не соответствует вашему вопросу, вы объявляете два диалога, но используете только один из них.

Sarah Miller

Хорошо, спасибо.

Поэтому только один из них работает??

Сара

Richard MacCutchan

Насколько я вижу, второй ничего не делает.

2 Ответов

Рейтинг:
19

David Crow

Внутри onTimeSet() метод, который вы только используете time1Text.

В вашей текущей реализации View объект, который передается onClick() это EditText это был щелчок. Принимая это во внимание, мое предложение было бы примерно таким:

@Override
public void onClick(View v) 
{
    // Get Current Time
    Calendar c = Calendar.getInstance();
    mHour = c.get(Calendar.HOUR_OF_DAY);
    mMinute = c.get(Calendar.MINUTE);
 
    // Launch Time Picker Dialog
    TimePickerDialog tpd = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() 
    {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) 
        {
            ((EditText) v).setText(hourOfDay + ":" + minute);
        }
    }, mHour, mMinute, false);

    tpd.show();
}


Sarah Miller

Большое вам спасибо, Дэвид Кроу.

Мне нравится ваше решение, но единственная проблема заключается в том, что у меня есть еще два текста редактирования на странице, которые используются для ввода дат.

В вашем решении, когда пользователь нажимает на дату редактирования текста, он также позволяет ему ввести время.

Как я могу отличить три подборщика времени от двух подборщиков дат?

Я уже несколько часов пытаюсь заставить это работать и начинаю терять надежду.

спасибо снова.

Сара

Рейтинг:
1

David Crow

То View объект, который отправляется в onClick() метод - это EditText виджет, на который был нажат клик. Различайте их с помощью чего-то вроде:

EditText et = (EditText) v;
if (et.getId() == R.id.etTime1)
    ;
else if (et.getId() == R.id.etTime2)
    ;