当前位置: 首页 > 知识库问答 >
问题:

onClickListener调用TextWatcher:非法前向引用(Android Studio Java)

邵逸明
2023-03-14
View.OnClickListener radio1Clicked = v ->{
        radioButton1.addTextChangedListener(textWatcher); //error under textWatcher : Illegal forward reference
        //More Operations Running here ... };

View.OnClickListener radio2Clicked = v ->{ 
        radioButton2.addTextChangedListener(textWatcher)};//error under textWatcher: Illegal forward reference
        //More Operations Running here ... };

View.OnClickListener radio3Clicked = v ->{ 
        radioButton2.addTextChangedListener(textWatcher)};//error under textWatcher: Illegal forward reference
        //More Operations Running here ... };

    TextWatcher textWatcher= new TextWatcher(){
        //Declarations and other stuff
                // RadioButton1
                if (radioButton1.isChecked()) {
                    basePrintable = 50;
                    calculatePcs = (int) (50 / sqIn);
                    iPieces.setText(String.valueOf(calculatePcs ));
                    if (!checker)//check Switch {
                        iPriceOut.setText("150.0");
                    } else if (checker) //re-check Switch{
                        iPriceOut.setText("50.0");
                    }
                }
                // RadioButton1
                if (radioButton1.isChecked()) {
                    basePrintable = 50;
                    calculatePcs = (int) (50 / sqIn);
                    iPieces.setText(String.valueOf(calculatePcs ));
                    if (!checker)//check Switch {
                        iPriceOut.setText("150.0");
                    } else if (checker) //re-check Switch{
                        iPriceOut.setText("50.0");
                    }
                }
                // RadioButton2
                if (radioButton1.isChecked()) {...}
                // RadioButton3
                if (radioButton1.isChecked()) {...}


     basePcs = Integer.parseInt(iPieces.getText().toString());
                baseSheet = 
     Integer.parseInt(iShit.getText().toString());
                basePrice = 
     Double.parseDouble(iPriceOut.getText().toString());
    }
public void onCheckedChanged(CompoundButton switchInput, boolean isChecked) {
        switchInput.addTextChangedListener(size);
        if (!isChecked) {
            switchInput.setText("...");
            radioButton1.setText("...");
            radioButton2.setText("...");
            radioButton3.setText("...");
        } else {
            switchInput.setText("...");
            radioButton1.setText("...");
            radioButton2.setText("...");
            radioButton3.setText("...");
        }
    }

谢谢你的帮助

共有1个答案

司寇阳曦
2023-03-14

我想问题是你不能在里面引用相同的对象

View.OnClickListener o1 = v ->{
        iOpt1.addTextChangedListener(size); //error: Illegal Forward Reference
        if (iOpt1.isChecked()) {
            iOpt2.setChecked(false);
            iOpt3.setChecked(false);
        }
        iOpt1.setChecked(true);
    };

改为

View.OnClickListener o1 = v ->{
        v.addTextChangedListener(size); //error: Illegal Forward Reference
        if (v.isChecked()) {
            iOpt2.setChecked(false);
            iOpt3.setChecked(false);
        }
        v.setChecked(true);
    };

在单击视图时使用v

 类似资料:
  • 问题内容: 我正在用Java编写游戏,该游戏由一排瓷砖组成。我将无法以独创性方式定义图块的边缘以及它们之间的相互关系,例如,要获得图块的相对边缘,我希望能够输入。但是,当使用枚举定义这些边时,我最终不得不在构造函数中转发至少其中两个引用: 有没有什么办法可以使用枚举来解决这个问题呢? 问题答案: 您可以这样做不是那么直观。

  • 问题内容: 嗨,当我尝试从excel工作表中提取数据时,文件对象创建中出现了非法的前向引用错误。 如何解决呢? 问题答案: “非法前向引用”是指您试图在定义变量之前使用它。 在这种情况下,您尝试在的声明中调用on的方法。

  • 问题内容: 以下代码是否适用于合法正向引用?如果是,为什么? 问题答案: 上面的代码完全是合法的Java。在Java中,静态字段的初始化如下:首先,将所有字段的类型(0 ,或)设置为默认值,然后按照声明它们的顺序进行初始化。这意味着上述代码可以保证做到以下几点: 将和设置为零,因为这是s 的默认值。 通过调用进行初始化,以读取的值。由于尚未初始化,因此其值仍为0。 初始化为5。 这意味着它将取值为

  • 所以我有一个简单的应用程序,有一个按钮和一个文本视图,当按钮被点击(错误是应用程序只是崩溃)一个对话框弹出,从对话框弹出,将有一个文本字段和一个按钮。我将在文本字段中输入一个名称,当我单击该按钮时,文本视图(在主activity中)将被设置为我输入的名称(从alertdialog中)。 mainactivity.java Logcat中的错误

  • 问题内容: 我试图编译其中一个Java类与拒绝 非法向前引用 错误,其中有问题的参考是词汇 后 的基准场。在显示相同行为时,将尽可能精简以下类: 并且的许多用途仅用作占位符,以删除不相关的代码段。 使用编译时,javac会显示以下错误消息: 因此,编译器抱怨的声明引用,而应在的声明范围内。但是,一旦删除了in 的声明的引用(例如,通过将第5行从更改为),编译器将接受该类。 如何解释呢?我对 前锋的