Android 我无法更改EditText1中的文本以响应EditText2中的文本更改

Android 我无法更改EditText1中的文本以响应EditText2中的文本更改,android,android-edittext,converter,forceclose,textchanged,Android,Android Edittext,Converter,Forceclose,Textchanged,我希望用户以摄氏度输入温度,以华氏度显示温度,反之亦然。我认为TextChangedListener是无需按下任何按钮即可进行转换的完美选择。当用户输入时,值会不断变化 我遇到的最大问题是EditText不会接受任何输入。当我输入任何内容时,应用程序强制关闭。请告诉我怎么了。这是我的密码 public class MainActivity extends ActionBarActivity { EditText C, F; Button exit; @Override protected v

我希望用户以摄氏度输入温度,以华氏度显示温度,反之亦然。我认为TextChangedListener是无需按下任何按钮即可进行转换的完美选择。当用户输入时,值会不断变化

我遇到的最大问题是EditText不会接受任何输入。当我输入任何内容时,应用程序强制关闭。请告诉我怎么了。这是我的密码

public class MainActivity extends ActionBarActivity {

EditText C, F;
Button exit;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    C = (EditText) findViewById(R.id.celsius);
    F = (EditText) findViewById(R.id.fahrenheit);
    exit = (Button) findViewById(R.id.exit);

    C.addTextChangedListener(new TextWatcher() {
        float f,c;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            c = Float.parseFloat(s.toString());
            f = (((9 / 5) * c) + 32);
            F.setText((int) f);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    F.addTextChangedListener(new TextWatcher() {
        float f
                ,
                c;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            f = Float.parseFloat(s.toString());
            c = ((f - 32) * (5 / 9));
            C.setText((int) c);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

}
}

这是我的日志

01-25 00:55:35.486    7051-7051/com.jainchiranjeev.mylearning7.mylearning_7 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.jainchiranjeev.mylearning7.mylearning_7, PID: 7051
java.lang.StackOverflowError
        at android.text.SpannableStringBuilder.getChars(SpannableStringBuilder.java:915)
        at android.text.TextUtils.getChars(TextUtils.java:81)
        at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151)
        at android.text.TextUtils.getChars(TextUtils.java:81)
        at android.text.TextUtils.indexOf(TextUtils.java:114)
        at android.text.StaticLayout.generate(StaticLayout.java:187)
        at android.text.DynamicLayout.reflow(DynamicLayout.java:288)
        at android.text.DynamicLayout.<init>(DynamicLayout.java:174)
        at android.widget.TextView.makeSingleLayout(TextView.java:6205)
        at android.widget.TextView.makeNewLayout(TextView.java:6103)
        at android.widget.TextView.checkForRelayout(TextView.java:6752)
        at android.widget.TextView.setText(TextView.java:3850)
        at android.widget.TextView.setText(TextView.java:3708)
        at android.widget.EditText.setText(EditText.java:81)
        at android.widget.TextView.setText(TextView.java:3683)
        at com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$2.onTextChanged(MainActivity.java:66)
        at android.widget.TextView.sendOnTextChanged(TextView.java:7610)
        at android.widget.TextView.setText(TextView.java:3853)
        at android.widget.TextView.setText(TextView.java:3708)
        at android.widget.EditText.setText(EditText.java:81)
        at android.widget.TextView.setText(TextView.java:3683)
        at com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$1.onTextChanged(MainActivity.java:45)
        at android.widget.TextView.sendOnTextChanged(TextView.java:7610)
        at android.widget.TextView.setText(TextView.java:3853)
        at android.widget.TextView.setText(TextView.java:3708)
        at android.widget.EditText.setText(EditText.java:81)
        at android.widget.TextView.setText(TextView.java:3683)
        at com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$2.onTextChanged(MainActivity.java:66)
        at android.widget.TextView.sendOnTextChanged(TextView.java:7610)
        at android.widget.TextView.setText(TextView.java:3853)
        at android.widget.TextView.setText(TextView.java:3708)
        at android.widget.EditText.setText(EditText.java:81)
        at android.widget.TextView.setText(TextView.java:3683)
        at com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$1.onTextChanged(MainActivity.java:45)
        at android.widget.TextView.sendOnTextChanged(TextView.java:7610)
        at android.widget.TextView.setText(TextView.java:3853)
        at android.widget.TextView.setText(TextView.java:3708)
        at android.widget.EditText.setText(EditText.java:81)
        at android.widget.TextView.setText(TextView.java:3683)
        at com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$2.onTextChanged(MainActivity.java:66)
        at android.widget.TextView.sendOnTextChanged(TextView.java:7610)
        at android.widget.TextView.setText(TextView.java:3853)
        at android.widget.TextView.setText(TextView.java:3708)
        at android.widget.EditText.setText(EditText.java:81)
        at android.widget.TextView.setText(TextView.java:3683)
        at com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$1.onTextChanged(MainActivity.java:45)
        at android.widget.TextView.sendOnTextChanged(TextView.java:7610)
        at android.widget.TextView.setText(TextView.java:3853)
        at android.widget.TextView.setText(TextView.java:3708)
        at android.widget.EditText.setText(EditText.java:81)
        at android.widget.TextView.setText(TextView.java:3683)
        at com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$2.onTextChanged(MainActivity.java:66)
        at android.widget.TextView.sendOnTextChanged(TextView.java:7610)
        at android.widget.TextView.setText(TextView.java:3853)
        at android.widget.TextView.setText(TextView.java:3708)
        at android.widget.EditText.setText(EditText.java:81)
        at android.widget.TextView.setText(TextView.java:3683)
        at com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$1.onTextChanged(MainActivity.java:45)
        at android.widget.TextView.sendOnTextChanged(TextView.java:7610)
        at android.widget.TextView.setText(TextView.java:3853)
        at android.widget.TextView.setText(
01-25 00:55:35.486 7051-7051/com.jainchiranjeev.mylearning 7.mylearning_7 E/AndroidRuntime﹕ 致命异常:主
流程:com.jainchiranjeev.mylearning 7.mylearning_7,PID:7051
栈溢出
位于android.text.SpannableStringBuilder.getChars(SpannableStringBuilder.java:915)
位于android.text.TextUtils.getChars(TextUtils.java:81)
位于android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151)
位于android.text.TextUtils.getChars(TextUtils.java:81)
位于android.text.TextUtils.indexOf(TextUtils.java:114)
在android.text.StaticLayout.generate上(StaticLayout.java:187)
在android.text.dynamiclayot.reflow(dynamiclayot.java:288)
位于android.text.DynamicLayout.(DynamicLayout.java:174)
在android.widget.TextView.makeSingleLayout上(TextView.java:6205)
位于android.widget.TextView.makeNewLayout(TextView.java:6103)
在android.widget.TextView.checkForRelayout(TextView.java:6752)中
位于android.widget.TextView.setText(TextView.java:3850)
位于android.widget.TextView.setText(TextView.java:3708)
位于android.widget.EditText.setText(EditText.java:81)
位于android.widget.TextView.setText(TextView.java:3683)
在com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$2.onTextChanged(MainActivity.java:66)
在android.widget.TextView.SendContextChanged(TextView.java:7610)
位于android.widget.TextView.setText(TextView.java:3853)
位于android.widget.TextView.setText(TextView.java:3708)
位于android.widget.EditText.setText(EditText.java:81)
位于android.widget.TextView.setText(TextView.java:3683)
在com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$1.onTextChanged(MainActivity.java:45)
在android.widget.TextView.SendContextChanged(TextView.java:7610)
位于android.widget.TextView.setText(TextView.java:3853)
位于android.widget.TextView.setText(TextView.java:3708)
位于android.widget.EditText.setText(EditText.java:81)
位于android.widget.TextView.setText(TextView.java:3683)
在com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$2.onTextChanged(MainActivity.java:66)
在android.widget.TextView.SendContextChanged(TextView.java:7610)
位于android.widget.TextView.setText(TextView.java:3853)
位于android.widget.TextView.setText(TextView.java:3708)
位于android.widget.EditText.setText(EditText.java:81)
位于android.widget.TextView.setText(TextView.java:3683)
在com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$1.onTextChanged(MainActivity.java:45)
在android.widget.TextView.SendContextChanged(TextView.java:7610)
位于android.widget.TextView.setText(TextView.java:3853)
位于android.widget.TextView.setText(TextView.java:3708)
位于android.widget.EditText.setText(EditText.java:81)
位于android.widget.TextView.setText(TextView.java:3683)
在com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$2.onTextChanged(MainActivity.java:66)
在android.widget.TextView.SendContextChanged(TextView.java:7610)
位于android.widget.TextView.setText(TextView.java:3853)
位于android.widget.TextView.setText(TextView.java:3708)
位于android.widget.EditText.setText(EditText.java:81)
位于android.widget.TextView.setText(TextView.java:3683)
在com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$1.onTextChanged(MainActivity.java:45)
在android.widget.TextView.SendContextChanged(TextView.java:7610)
位于android.widget.TextView.setText(TextView.java:3853)
位于android.widget.TextView.setText(TextView.java:3708)
位于android.widget.EditText.setText(EditText.java:81)
位于android.widget.TextView.setText(TextView.java:3683)
在com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$2.onTextChanged(MainActivity.java:66)
在android.widget.TextView.SendContextChanged(TextView.java:7610)
位于android.widget.TextView.setText(TextView.java:3853)
位于android.widget.TextView.setText(TextView.java:3708)
位于android.widget.EditText.setText(EditText.java:81)
位于android.widget.TextView.setText(TextView.java:3683)
在com.jainchiranjeev.mylearning7.mylearning_7.MainActivity$1.onTextChanged(MainActivity.java:45)
在android.widget.TextView.SendContextChanged(TextView.java:7610)
位于android.widget.TextView.setText(TextView.java:3853)
在android.widget.TextView.setText(

我将实现两个
文本视图来显示每次计算的结果。您现在所做的是创建一个无限循环,当更改第一个
EditText
中的文本时,触发第二个编辑文本
onTextChanged
侦听器,依此类推。因此出现堆栈溢出错误

将实现更改为在
文本视图
中显示每个
编辑文本
计算,则问题将消失

简而言之,添加您的
TextView

TextView tv = (TextView)findViewById(R.id.textview);
在你的

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    c = Float.parseFloat(s.toString());
    f = (((9 / 5) * c) + 32);
    tv .setText(String.valueOf(f));
}
试试那个密码

我刚刚研究了文件,上面说

onTextChanged()不是修改EditText文本的地方

这里是您可以从那里验证的文档链接

因此,您可以做的是在文本更改后将代码移动到

C.addTextChangedListener(new TextWatcher() {
    float f
            ,
            c;

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {



    }

    @Override
    public void afterTextChanged(Editable s) {
        if (!isAlpha(s.toString)){

            if(!s.toString().equals("")){

                c = Float.parseFloat(s.toString());
                f = (((9 / 5) * c) + 32);
                F.setText(""+ f);
             }
        }
    }
});
这个isAlpha函数用于che
 public boolean isAlpha(String name) {
    return name.matches("[a-zA-Z]+");
}