Java 从Android中的自定义对象动态更新textView

Java 从Android中的自定义对象动态更新textView,java,android,textview,Java,Android,Textview,我想从自定义对象内部更新主活动中的TextView 自定义对象是从头编写的数字选择器。它有一个EditText和2个按钮(+/-)。 我的目的是当用户按下+或-按钮时,TextView将用该值更新 现在我可以想到两种可能的解决方案: 当按下+或-按钮时(在onClickListener内部),自定义对象将更新TextView 我定义了另一个扩展自定义选择器的类,该类具有更新textview的逻辑 但我的问题是,我希望将textView逻辑保留在自定义选择器之外(因此,如果有可能的话,可以在活动中

我想从自定义对象内部更新主活动中的TextView

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

现在我可以想到两种可能的解决方案:

  • 当按下+或-按钮时(在onClickListener内部),自定义对象将更新TextView
  • 我定义了另一个扩展自定义选择器的类,该类具有更新textview的逻辑 但我的问题是,我希望将textView逻辑保留在自定义选择器之外(因此,如果有可能的话,可以在活动中使用update函数)。 有解决这个问题的办法吗

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

    我希望每次选择器中的一个更改其值时,右角的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.croncalc
    MyPickerAngelistener上的公共接口{ 公共摘要void onMyPickerChanged(字符串srcTxt); }

    然后我在MyPickerClass(这是对象的名称)中添加了一个新的类变量:

    OnMyPickerChangeListener onMyPickerChangeListener;
    
    该变量将初始化为null。 在我在MyPicker中定义了两个新方法之后:

  • 第一个是SetOnMyickerAngelistener,通过该方法,我可以添加一个OnMyickerAngelistener:

    public void setOnMyPickerAngelistener(OnMyPickerAngelistener侦听器){ onMyPickerAngelistener=侦听器; }

  • 第二个方法是onMyPickerChanged,每次我们想要触发更改事件时都会调用该方法:

    私有void onMyPickerChanged(){ 如果(onMyPickerAngelistener!=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);
    

    现在它可以工作了:)

    如果有一个EditText应该显示##,那么TextView是如何在这里发挥作用的?也许是屏幕截图或动画?你应该提供一些代码?我不确定,但我的选择器不是时间选择器。它是不同的(计时器不符合我的目的),那么这个代码就不能应用于我的问题了好吧,我给了你想法的代码,现在你可以用它作为你的要求了
    minutesPicker.setOnMyPickerChangeListener(pickerListener);