gpt4 book ai didi

android - SeekBar 和 EditText 相互更改导致的 Stackoverflow 错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:58 26 4
gpt4 key购买 nike

所以我设置了一个 SeekBar 和一个输入类型为数字的 EditText。

我希望它是这样的,如果用户输入一个可行范围内的数字,它将改变 SeekBar 的进度。此外;如果用户决定他们宁愿通过拖动 SeekBar 来改变;这会将 EditText 更改为 SeekBar 的当前值。

我收到一个 stackoverflow 试图实现这个,我相信这是因为我让他们都使用他们的 onChanged 监听器。所以他们正在给彼此带来无限的变化。

如果是这样的话;我将如何实现所解释的预期结果?

代码:

s1.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() {

@Override
public void onStopTrackingTouch(SeekArc seekArc) {
// TODO Auto-generated method stub

}

@Override
public void onStartTrackingTouch(SeekArc seekArc) {
// TODO Auto-generated method stub

}

@Override
public void onProgressChanged(SeekArc seekArc, int progress,
boolean fromUser) {
if(progress != Integer.parseInt(et1.getText().toString()))
et1.setText(String.valueOf(progress));
// TODO Auto-generated method stub

}
});

et1.addTextChangedListener(new TextWatcher(){

@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
int i = Integer.parseInt(s.toString());
if(i != Integer.parseInt(et1.getText().toString()))
s1.setProgress(i);
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub

}

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}

});

日志:

    03-18 14:38:59.104: E/AndroidRuntime(2894): FATAL EXCEPTION: main
03-18 14:38:59.104: E/AndroidRuntime(2894): java.lang.StackOverflowError
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.text.DynamicLayout.reflow(DynamicLayout.java:284)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.text.DynamicLayout.<init>(DynamicLayout.java:170)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.makeSingleLayout(TextView.java:5867)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.makeNewLayout(TextView.java:5765)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.checkForRelayout(TextView.java:6304)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3567)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.EditText.setText(EditText.java:80)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3400)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$1.onProgressChanged(HomeFragment.java:61)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.updateProgress(SeekArc.java:425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.setProgress(SeekArc.java:454)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$5.afterTextChanged(HomeFragment.java:116)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.sendAfterTextChanged(TextView.java:7119)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3574)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.EditText.setText(EditText.java:80)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3400)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$1.onProgressChanged(HomeFragment.java:61)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.updateProgress(SeekArc.java:425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.setProgress(SeekArc.java:454)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$5.afterTextChanged(HomeFragment.java:116)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.sendAfterTextChanged(TextView.java:7119)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3574)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.EditText.setText(EditText.java:80)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3400)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$1.onProgressChanged(HomeFragment.java:61)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.updateProgress(SeekArc.java:425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.setProgress(SeekArc.java:454)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$5.afterTextChanged(HomeFragment.java:116)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.sendAfterTextChanged(TextView.java:7119)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3574)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.EditText.setText(EditText.java:80)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3400)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$1.onProgressChanged(HomeFragment.java:61)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.updateProgress(SeekArc.java:425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.setProgress(SeekArc.java:454)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$5.afterTextChanged(HomeFragment.java:116)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.sendAfterTextChanged(TextView.java:7119)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3574)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.EditText.setText(EditText.java:80)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3400)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$1.onProgressChanged(HomeFragment.java:61)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.updateProgress(SeekArc.java:425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.setProgress(SeekArc.java:454)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$5.afterTextChanged(HomeFragment.java:116)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.sendAfterTextChanged(TextView.java:7119)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3574)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.EditText.setText(EditText.java:80)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3400)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$1.onProgressChanged(HomeFragment.java:61)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.updateProgress(SeekArc.java:425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.triggertrap.seekarc.SeekArc.setProgress(SeekArc.java:454)
03-18 14:38:59.104: E/AndroidRuntime(2894): at com.nanospark.upcdemo.HomeFragment$5.afterTextChanged(HomeFragment.java:116)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.sendAfterTextChanged(TextView.java:7119)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3574)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.TextView.setText(TextView.java:3425)
03-18 14:38:59.104: E/AndroidRuntime(2894): at android.widget.EditText.setText(EditText.java:80

最佳答案

onProgressChanged(SeekArc seekArc, int progress, boolean fromUser) 中,您有一个 fromUser 变量。如果用户不是擦洗您的 SeekBar/Arc 的用户,请不要在您的 EditText 上设置文本(文本可以假定为正确的,因为它启动了事件链...)

在你的听众中:

@Override
public void onProgressChanged(SeekArc seekArc, int progress, boolean fromUser) {
if(fromUser && progress != Integer.parseInt(et1.getText().toString())) {
et1.setText(String.valueOf(progress));
}
}

关于android - SeekBar 和 EditText 相互更改导致的 Stackoverflow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22489490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com