如何在EditText&中自动更改TextView。 Seekbar改变了

时间:2017-08-05 20:56:23

标签: java android android-layout

我的应用程序是这样的: 它有4 EditText(输入类型:数字),它以编程方式链接到4 Seekbar。如果EditText A已更改,则Seekbar A的进度将根据EditText A的号码值进行更改。如果EditText A的值为40,则Seekbar会将其进度更改为40%。反之亦然,如果我将Seekbar A的进度拖至50%,则EditText值将为50。

然后我有TextView,我想要显示A&的总价值。 B& C& D.因此,如果更改了A(使用Seekbar / EditText),该值也会更改。

我试过

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

即使它有效,它也无法解决我与搜索栏的关系。

我的搜索栏和代码的代码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行是: @override

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

updateText()是第118行。这是我删除值

的edittext的一部分

1 个答案:

答案 0 :(得分:1)

如果您尝试设置int值,我将尝试搜索资源,因此请尝试将其转换为String并在TextView中设置它将起作用。

有两种方法TextView.setText(int)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添加单个侦听器并进行检查。