我的应用程序是这样的:
它有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的一部分答案 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添加单个侦听器并进行检查。