1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Preferences - TimePicker não salva os minutos

Bom dia pessoal,

estou com problemas para salvar os minutos do TimePicker quando insiro os dados usando o teclado. Se eu inserir os dados usando os botões Cima e Baixo do timepicker os dados são gravados corretamente. Caso eu usar o teclado os dados não são gravados ao clicar em OK para fechar o DialogPreference.

Isso só ocorre apenas com os minutos, se eu alterar as horas usando tanto o teclado quanto o botões do picker os dados são salvos corretamente.

Implementei o listener OnTimeChangedListener do TimePicker para verificar se as alterações chegam qd altero usando o teclado mas nada ocorre.

Alguém tem ideia do que estou fazendo de errado ? Acredito ser algo simples mas não consigo encontrar o erro.

import java.util.Calendar;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.DialogPreference;
import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.ToggleButton;

public class TimePreference extends DialogPreference implements TimePicker.OnTimeChangedListener{

    private static final String TAG = "TimePreference";

    private String lastHour = "00";
    private String lastMinute = "00";
    private TimePicker picker = null;
    private ToggleButton toggleReboot = null;
    private TextView autoReboot = null;

    private Calendar calendar = null;

    private SharedPreferences prefs = null;

    public TimePreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        setPersistent(true);

        setPositiveButtonText(android.R.string.ok);
        setNegativeButtonText(android.R.string.cancel);

        calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());

        prefs = PreferenceManager.getDefaultSharedPreferences(context);
    }

    public static String getHour(String time) {
        String[] pieces = time.split(":");

        return pieces[0];
    }

    public static String getMinute(String time) {
        String[] pieces = time.split(":");

        return pieces[1];
    }

    @Override
    protected View onCreateDialogView() {
        LinearLayout layout = new LinearLayout(getContext());

        LinearLayout autoLayout = new LinearLayout(getContext());

        autoReboot = new TextView(getContext());
        autoReboot.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
        autoReboot.setText(R.string.pref_auto_reboot);

        toggleReboot = new ToggleButton(getContext());
        toggleReboot.setChecked(prefs.getBoolean(
                SettingsFragment.KEY_PREF_AUTO_REBOOT, true));

        autoLayout.addView(autoReboot);
        autoLayout.addView(toggleReboot);

        picker = new TimePicker(getContext());
        picker.setOnTimeChangedListener(this);
        picker.setIs24HourView(true);
        layout.addView(autoLayout);

        layout.addView(picker);

        return layout;
    }

    @Override
    protected void onBindDialogView(View v) {
        super.onBindDialogView(v);
        String time = prefs.getString(SettingsFragment.KEY_PREF_REBOOT_TIME,
                Config.REBOOT_TIME_DEF);

        lastHour = getHour(time);
        lastMinute = getMinute(time);

        picker.setCurrentHour(Integer.parseInt(lastHour));
        picker.setCurrentMinute(Integer.parseInt(lastMinute));
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {        
        super.onDialogClosed(positiveResult);

        if (positiveResult) {

            lastHour = picker.getCurrentHour().toString();
            lastMinute = picker.getCurrentMinute().toString();

            if (Integer.parseInt(lastHour) < 10)
                lastHour = "0" + lastHour;

            if (Integer.parseInt(lastMinute) < 10)
                lastMinute = "0" + lastMinute;

            String time = lastHour + ":" + lastMinute;

            Log.d(TAG, "Time: " + time);
            setSummary(getSummary());
            if (callChangeListener(time)) {
                persistString(time);
                calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY, picker.getCurrentHour());
                calendar.set(Calendar.MINUTE, picker.getCurrentMinute());
                Log.d(TAG,
                        "Reboot agendado: " + calendar.getTime() + " hour - "
                                + picker.getCurrentHour() + ":"
                                + picker.getCurrentMinute());

                SharedPreferences.Editor editor = getEditor();

                editor.putString(SettingsFragment.KEY_PREF_REBOOT_TIME, time);
                editor.putBoolean(SettingsFragment.KEY_PREF_AUTO_REBOOT,
                        toggleReboot.isChecked());
                editor.commit();

                if (toggleReboot.isChecked())
                    new RebootAlarm(getContext(), calendar);
            }
        }
    }

    @Override
    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
        Log.d(TAG,"onTimeChanged: " + hourOfDay + ":" + minute);
        Log.d(TAG,"onTimeChanged: " + view.getCurrentHour() + ":" + view.getCurrentMinute());

    }

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android ou faça a sua própria pergunta.