Java 从Android中的自定义对象动态更新textView
我想从自定义对象内部更新主活动中的TextView 自定义对象是从头编写的数字选择器。它有一个EditText和2个按钮(+/-)。 我的目的是当用户按下+或-按钮时,TextView将用该值更新 现在我可以想到两种可能的解决方案:Java 从Android中的自定义对象动态更新textView,java,android,textview,Java,Android,Textview,我想从自定义对象内部更新主活动中的TextView 自定义对象是从头编写的数字选择器。它有一个EditText和2个按钮(+/-)。 我的目的是当用户按下+或-按钮时,TextView将用该值更新 现在我可以想到两种可能的解决方案: 当按下+或-按钮时(在onClickListener内部),自定义对象将更新TextView 我定义了另一个扩展自定义选择器的类,该类具有更新textview的逻辑 但我的问题是,我希望将textView逻辑保留在自定义选择器之外(因此,如果有可能的话,可以在活动中
<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));
}
OnClickListener-clickListener=new-OnClickListener(){
公共void onClick(视图v){
开关(v.getId()){
案例R.id.decbtn:
步骤(-1);
打破
案例R.id.incbtn:
违约:
步骤(1);
打破
}
}
};
私有无效步骤(int步骤){
电流+=步进;
如果(步骤>0){
decButton.setEnabled(真);
如果(当前>最大数量){
如果(循环){
当前-=最大数量;
}否则{
电流=最大值;
incButton.setEnabled(假);
incButton.setPressed(设置按下)(错误);
}
}
}否则{
incButton.setEnabled(真);
如果(当前<最小编号){
如果(循环){
电流+=最大值;
}否则{
当前=最小编号;
decButton.setEnabled(false);
decButton.setPressed(设置按下)(错误);
}
}
}
pickerText.setText(整数.toString(当前));
}
提前谢谢。
伊万
希望它能帮助你好的,我自己回答(我找到了解决办法)
我为我的对象集定义了一个CustomListener。
我声明了一个名为:
包org.croncalcMyPickerAngelistener上的公共接口{ 公共摘要void onMyPickerChanged(字符串srcTxt); } 然后我在MyPickerClass(这是对象的名称)中添加了一个新的类变量:
OnMyPickerChangeListener onMyPickerChangeListener;
该变量将初始化为null。
在我在MyPicker中定义了两个新方法之后:
OnMyPickerChangeListener pickerListener = new OnMyPickerChangeListener() {
@Override
public void onMyPickerChanged(String srcTxt) {
localTv.setText("Value: " + srcTxt);
}
};
我将该侦听器添加到选择器:
minutesPicker.setOnMyPickerChangeListener(pickerListener);
现在它可以工作了:)如果有一个EditText应该显示##,那么TextView是如何在这里发挥作用的?也许是屏幕截图或动画?你应该提供一些代码?我不确定,但我的选择器不是时间选择器。它是不同的(计时器不符合我的目的),那么这个代码就不能应用于我的问题了好吧,我给了你想法的代码,现在你可以用它作为你的要求了
minutesPicker.setOnMyPickerChangeListener(pickerListener);