Java 如何在编辑文本时自动更改文本视图&;Seekbar已更改

Java 如何在编辑文本时自动更改文本视图&;Seekbar已更改,java,android,android-layout,Java,Android,Android Layout,我的应用程序的工作原理如下: 它有4个EditText(输入类型:number),通过编程方式链接到4个Seekbar。如果EditTextA被更改,则SeekbarA的进度将根据EditTextA的数值更改。如果EditTextA的值为40,则Seekbar将其进度更改为40%。反之亦然,如果我将SeekbarA的进度拖动到50%,则EditText值将为50 然后我有了这个文本视图,我想显示A&B&C&D的总值。因此,如果A被更改(使用Seekbar/编辑文本),该值也会更改 我已经试过了

我的应用程序的工作原理如下: 它有4个
EditText
(输入类型:number),通过编程方式链接到4个
Seekbar
。如果
EditText
A被更改,则
Seekbar
A的进度将根据
EditText
A的数值更改。如果
EditText
A的值为40,则
Seekbar
将其进度更改为40%。反之亦然,如果我将
Seekbar
A的进度拖动到50%,则
EditText
值将为50

然后我有了这个
文本视图
,我想显示A&B&C&D的总值。因此,如果A被更改(使用
Seekbar
/
编辑文本
),该值也会更改

我已经试过了

setText((Integer.parseInt(EditTextA.getText().toString())) + (Integer.parseInt(EditTextB.getText().toString()) + (Integer.parseInt(EditTextC.getText().toString()) + (Integer.parseInt(EditTextD.getText().toString()));
但它给了我一个错误:

原因:android.content.res.Resources$NotFoundException:String 资源ID#0x0

即使它能工作,它也不能解决我和Seekbar的关系


seekbar和editText的我的代码:

        seekbarPrice.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            valuePrice.setText(String.valueOf(seekBar.getProgress()));

        }
    });

    valuePrice.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
            try {
                seekbarPrice.setProgress(Integer.parseInt(editable.toString()));
            } catch (Exception ex) {
            }
            ;
        }
    });

提前谢谢! 编辑: @Muthukrishnan Rajendran的解决方案有效,但它给了我另一个错误

如果我更改edittext A而不先擦除edittext中的所有数字(如40->4(擦除5)->45),代码会工作。 但如果我先擦除所有数字(40->(全部擦除)),则会产生以下错误:

 FATAL EXCEPTION: main
                                                                    Process: id.ac.umn.mobile.skripsi, PID: 5996
                                                                    java.lang.NumberFormatException: Invalid int: ""
                                                                        at java.lang.Integer.invalidInt(Integer.java:138)
                                                                        at java.lang.Integer.parseInt(Integer.java:358)
                                                                        at java.lang.Integer.parseInt(Integer.java:334)
                                                                        at PreferencesActivity.updateText(PreferencesActivity.java:53)
                                                                        at PreferencesActivity.access$000(PreferencesActivity.java:40)
                                                                        at PreferencesActivity$2.afterTextChanged(PreferencesActivity.java:118)
                                                                        at android.widget.TextView.sendAfterTextChanged(TextView.java:7689)
                                                                        at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:9482)
                                                                        at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:972)
                                                                        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:516)
                                                                        at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:216)
                                                                        at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:33)
                                                                        at android.view.inputmethod.BaseInputConnection.deleteSurroundingText(BaseInputConnection.java:244)
                                                                        at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:389)
                                                                        at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                        at android.os.Looper.loop(Looper.java:135)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5247)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at java.lang.reflect.Method.invoke(Method.java:372)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
第118行是: @凌驾

public void afterTextChanged(Editable editable) {
            try {
                seekbarPrice.setProgress(Integer.parseInt(editable.toString()));
            } catch (Exception ex) {
            }
            updateText();
        }
    });

updateText()是第118行。这是edittext的一部分,我会删除该值。如果您尝试设置
int
值,我会尝试搜索资源,因此尝试将其转换为字符串并在TextView中设置它将起作用

有两种方法,一种是
TextView.setText(CharSequence text)
,第一种方法将指向资源id,您给出了
int
,因此它试图在资源中搜索该int值

这样设置,

setText(String.valueOf((Integer.parseInt(EditTextA.getText().toString())) + (Integer.parseInt(EditTextB.getText().toString()) + (Integer.parseInt(EditTextC.getText().toString()) + (Integer.parseInt(EditTextD.getText().toString())));
对于每个SeekBar,请按如下步骤在布尔值上创建

private boolean isChangeByProgressBarA = false;

private void updateText() {
   setText(String.valueOf((Integer.parseInt(EditTextA.getText().toString())) + (Integer.parseInt(EditTextB.getText().toString()) + (Integer.parseInt(EditTextC.getText().toString()) + (Integer.parseInt(EditTextD.getText().toString())));
}

seekbarPrice.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                if(isChangeByProgressBarA) {
                    valuePrice.setText(String.valueOf(seekBar.getProgress()));
                }

                updateText();
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                isChangeByProgressBarA = true;
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                isChangeByProgressBarA = false;
             }
        });

        valuePrice.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                try {
                       if(!TextUtils.isEmpty(editable.toString())) {

       seekbarPrice.setProgress(Integer.parseInt(editable.toString()));
                    }
                } catch (Exception ex) {
                }

                updateText();
            }
        });

对所有文本执行此操作,或者您可以放置单个侦听器并根据Id进行检查。

我尝试了此操作,虽然它修复了错误,但TextView的编号为0,并且在我更改EditText和SeekBar时,它根本没有改变……谢谢!我会试试这个,并尽快报告!当然,如果你有任何问题,请告诉我。它成功了!谢谢我没有使用布尔值&没有对seekbar代码进行任何更改,因为我发现edittext代码本身已经更改了seekbar,反之亦然,因此如果seekbar被更改,它将更改edittext并调用updatetext函数再次验证代码,您可能会得到循环方法。