Динамическое обновление textView из пользовательского объекта в Android - PullRequest
0 голосов
/ 23 августа 2011

Я хочу обновить TextView в основном действии из пользовательского объекта.

Пользовательский объект - это средство выбора номера, написанное с нуля.Он имеет EditText и 2 кнопки (+/-).Моя цель состоит в том, чтобы, когда пользователь нажимал кнопку + или -, TextView обновлялся этим значением.

Теперь я могу думать о 2 возможных решениях:

  1. Пользовательский объект обновляет TextView при нажатии кнопки + или - (внутри onClickListener).
  2. Я определяю другой класс, который расширяет пользовательский инструмент выбора, с логикой для обновления просмотра текста.

Но моя проблема в том, что я хочу сохранить логику textView вне пользовательского средства выбора (поэтому, если возможно, иметь функцию обновления внутри действия).Есть решение этой проблемы?

XML-код custompicker выглядит следующим образом:

<org.croncalc.MyPicker android:id="@+id/hourpicker"
                android:orientation="vertical"
                android:layout_width="65dp"
                croncalc:maxnumber="24"
                croncalc:minnumber="1"
                croncalc:step="5"
                croncalc:cycle="true"
                android:layout_height="wrap_content">

Вот снимок экрана

Я хочу, чтобы каждый раз, когда один из средств выбора менял свое значение, textviewв правом углу будет обновлено.

Если полезно, здесь код onClick () для кнопок +/-:

    OnClickListener clickListener = new OnClickListener() {
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.decbtn:
            step(-1);
            break;
        case R.id.incbtn:
        default:
            step(1);
            break;
        }
    }                   
};

private void step(int step) {
    current += step;
    if (step > 0) {
        decButton.setEnabled(true);         
        if ( current > maxNumber) {
            if(cycle){
                current-=maxNumber;
            } else {
                current=maxNumber;
                incButton.setEnabled(false);
                incButton.setPressed(false);
            }           
        }
    } else {
        incButton.setEnabled(true);
        if ( current < minNumber) {
            if(cycle){
                current+= maxNumber;
            } else {
                current=minNumber;
                decButton.setEnabled(false);
                decButton.setPressed(false);
            }                       
        }
    }
    pickerText.setText(Integer.toString(current));      
}

Заранее спасибо.Иван

Ответы [ 2 ]

1 голос
/ 23 августа 2011
TimePickerDialog.OnTimeSetListener mTimeSetListener =
     new TimePickerDialog.OnTimeSetListener() {
    @Override
    public void onTimeSet(TimePicker view,int hourOfDay, int minute) {
            //Update Here textView when you click on dialog     
                 };
 @Override
 protected Dialog onCreateDialog(int id) {
    switch (id) {
    case TIME_DIALOG_ID:
        return new TimePickerDialog(this,
                mTimeSetListener, mHour, mMinute, false);
    }
    return null;
 }

Надеюсь, это поможет вам

0 голосов
/ 24 августа 2011

Хорошо, я отвечаю сам (я нашел решение).

Я определяю CustomListener для моего объекта.Я объявил интерфейс с именем: package org.croncalc;
открытый интерфейс OnMyPickerChangeListener {public abstract void onMyPickerChanged (String srcTxt);}

и затем я добавил в MyPickerClass (это имя объекта) новую переменную класса:

OnMyPickerChangeListener onMyPickerChangeListener;

Эта переменная будет инициализирована с нулевым значением.После того, как я определил в MyPicker два новых метода:

  1. Первый - это setOnMyPickerChangeListener с этим методом, я могу добавить OnMyPickerChangeListener:

    публичный void setOnMyPickerChangeListener (listenMyerPyNerMickPyerNickMyPyNerMickPyNerMickPyNerMickPyNerMickPyNerMickPyNerMickPyNerMickPyNerMickPyNer_MickPyNer_MickPyNer_MickPyNerMickPlayer)= слушатель;}

  2. Второй метод - onMyPickerChanged, этот метод будет вызываться каждый раз, когда мы хотим вызвать событие изменения:

    private void onMyPickerChanged () {if (onMyPickerChangeListener! =null) {onMyPickerChangeListener.onMyPickerChanged (pickerText.getText (). toString ());}}

Теперь в основном задании я объявил новый OnMyPickerChangeListener и реализовал метод интерфейса onMyPickerchanged:

OnMyPickerChangeListener pickerListener = new OnMyPickerChangeListener() {

    @Override
    public void onMyPickerChanged(String srcTxt) {          
        localTv.setText("Value: " + srcTxt);
    }
};

И я добавил этот слушатель в средство выбора:

minutesPicker.setOnMyPickerChangeListener(pickerListener);

А теперь работает :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...