2011-08-23 64 views
0

我想从自定义对象中更新主活动中的TextView。动态更新Android中的自定义对象的textView

自定义对象是从头开始编写的数字选择器。它有一个EditText和2按钮(+/-)。 我的目的是,当用户按下+或 - 按钮时,TextView将被更新为该值。

现在我可以认为2个可能的解决方案:

  1. 自定义对象更新时的+或TextView的 - 按钮被按下(在onClickListener内侧)。
  2. 我定义了另一个扩展自定义选取器的类,并具有更新textview的逻辑。

但我的问题是,我想保留自定义选择器外的textView逻辑(所以如果可能有更新功能内的活动)。 这个问题有解决方法吗?

的custompicker XML代码是:

<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"> 

Here a screenshot

我想捡拾的是,每次一个改变其值右侧角球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));  
} 

预先感谢。 伊万

+0

如果有一个n EditText据说显示##,TextView如何在这里发挥作用?也许是截图或澄清? – yep

+0

你应该提供一些代码? – user370305

回答

0

好吧,我回答我自己(我找到了解决办法)。

我为我的objcet定义了一个CustomListener。我声明了一个叫做 包的org.croncalc接口;
public interface OnMyPickerChangeListener public abstract void onMyPickerChanged(String srcTxt); }

,然后我在MyPickerClass加入(这是对象的名称)的新类变量:

OnMyPickerChangeListener onMyPickerChangeListener; 

该变量将在零来初始化。 后我在MyPicker定义两个新方法:

  1. 首先是与该方法的setOnMyPickerChangeListener我可以添加一个OnMyPickerChangeListener:

    公共无效setOnMyPickerChangeListener(OnMyPickerChangeListener听者){ onMyPickerChangeListener =侦听器; }

  2. 第二种方法是onMyPickerChanged,该方法将被调用每次我们想要触发更改事件:

    私人无效onMyPickerChanged(){ 如果(!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); 

现在它工作:)

+0

我给你同样的事情,你答案 – Sameer

1
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

我不确定,但我的选择器不是时间选择器。这是不同的(TimePicker不适合我的目的),然后这个代码不能适用于我的问题.. – Ivan

+0

好吧,我给你代码的想法,现在你可以用它作为您的要求 – Sameer