更新搜索栏值
Updating seekbar value
我有一个搜索栏,其中具有以下间隔:最小值 = 100000,最大值为 2500000,间隔为 25000
我需要在 edittext 更改时更新我的搜索栏,还要验证不在 25000 范围内的数字。
这是我的代码:
int mininumloan_amount = 100000;
int maximum_loan_amount = 2500000;
int interval = 25000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seekbar);
loanAmountSeekbar = findViewById(R.id.loanAmountSeekbar);
loanAmountValue = findViewById(R.id.loanAmountValue);
setEditText();
setSeekBar();
}
private void setEditText() {
loanAmountValue.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) {
int porgress = Math.round((int) Double.parseDouble(charSequence.toString()));
if (porgress > mininumloan_amount)
loanAmountSeekbar.setProgress(porgress);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
private void setSeekBar() {
loanAmountSeekbar.setMax((maximum_loan_amount - mininumloan_amount) / interval);
loanAmountSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
double value = mininumloan_amount + (i * interval);
loanAmountValue.setText(value + "");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
我发现使用基于百分比 100 的进度条最简单。
简单地说,我会将输入转换为您允许贷款的最大数量的百分比。
这是我用于演示的代码以进行概念验证:
private void setEditText() {
loanAmountValue.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) {
double actualProgress = computeProgress(charSequence);
Log.d(TAG, "Progress: " + actualProgress);
// if the progress is 100 or less its in range
if(actualProgress <= 100) {
loanAmountSeekbar.setProgress((int) actualProgress);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
/*
Mostly where all the magic is, we convert input to percent
then check against minimum value, tell user to enter more.
If the percent is more than 100, we default to 100%.
*/
private Double computeProgress(CharSequence charSequence) {
try {
// Parse the value, also, used android:inputType="decimalNumber" in xml
double editTextNumber = Double.parseDouble(charSequence.toString());
if(editTextNumber < interval){
Toast.makeText(MainActivity.this, "Please enter a value greater than "+ interval, Toast.LENGTH_SHORT).show();
return 0.0;
}
// Turn the number into a percentage of the max value
double percentageOfMax = editTextNumber / maximum_loan_amount;
// Turn the percentage back into a number between 0 and 100
double percent = 100 * percentageOfMax;
// handle the max percent
if(percent > 100){
return 100.0;
}else {
return percent;
}
} catch (NumberFormatException ex) { // just in case something odd
ex.printStackTrace();
Toast.makeText(MainActivity.this, "Unable to parse: " + charSequence.toString(), Toast.LENGTH_SHORT).show();
}catch(ArithmeticException ex){ // extra since we check a min above, probably can exlude this
Toast.makeText(MainActivity.this, "value must not be 0 ", Toast.LENGTH_SHORT).show();
}
return 0.0;
}
private void setSeekBar() {
loanAmountSeekbar.setMax(100);
loanAmountSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(b){
double value = interval * i;
loanAmountValue.setText(value + "");
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
免责声明
这是一个非常快速的解决方案,因此您可能需要探索其他错误处理。但基本思想是,获取输入,将其转换为 100 的百分比。
祝你好运,编码愉快!
我有一个搜索栏,其中具有以下间隔:最小值 = 100000,最大值为 2500000,间隔为 25000
我需要在 edittext 更改时更新我的搜索栏,还要验证不在 25000 范围内的数字。
这是我的代码:
int mininumloan_amount = 100000;
int maximum_loan_amount = 2500000;
int interval = 25000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seekbar);
loanAmountSeekbar = findViewById(R.id.loanAmountSeekbar);
loanAmountValue = findViewById(R.id.loanAmountValue);
setEditText();
setSeekBar();
}
private void setEditText() {
loanAmountValue.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) {
int porgress = Math.round((int) Double.parseDouble(charSequence.toString()));
if (porgress > mininumloan_amount)
loanAmountSeekbar.setProgress(porgress);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
private void setSeekBar() {
loanAmountSeekbar.setMax((maximum_loan_amount - mininumloan_amount) / interval);
loanAmountSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
double value = mininumloan_amount + (i * interval);
loanAmountValue.setText(value + "");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
我发现使用基于百分比 100 的进度条最简单。
简单地说,我会将输入转换为您允许贷款的最大数量的百分比。
这是我用于演示的代码以进行概念验证:
private void setEditText() {
loanAmountValue.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) {
double actualProgress = computeProgress(charSequence);
Log.d(TAG, "Progress: " + actualProgress);
// if the progress is 100 or less its in range
if(actualProgress <= 100) {
loanAmountSeekbar.setProgress((int) actualProgress);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
/*
Mostly where all the magic is, we convert input to percent
then check against minimum value, tell user to enter more.
If the percent is more than 100, we default to 100%.
*/
private Double computeProgress(CharSequence charSequence) {
try {
// Parse the value, also, used android:inputType="decimalNumber" in xml
double editTextNumber = Double.parseDouble(charSequence.toString());
if(editTextNumber < interval){
Toast.makeText(MainActivity.this, "Please enter a value greater than "+ interval, Toast.LENGTH_SHORT).show();
return 0.0;
}
// Turn the number into a percentage of the max value
double percentageOfMax = editTextNumber / maximum_loan_amount;
// Turn the percentage back into a number between 0 and 100
double percent = 100 * percentageOfMax;
// handle the max percent
if(percent > 100){
return 100.0;
}else {
return percent;
}
} catch (NumberFormatException ex) { // just in case something odd
ex.printStackTrace();
Toast.makeText(MainActivity.this, "Unable to parse: " + charSequence.toString(), Toast.LENGTH_SHORT).show();
}catch(ArithmeticException ex){ // extra since we check a min above, probably can exlude this
Toast.makeText(MainActivity.this, "value must not be 0 ", Toast.LENGTH_SHORT).show();
}
return 0.0;
}
private void setSeekBar() {
loanAmountSeekbar.setMax(100);
loanAmountSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(b){
double value = interval * i;
loanAmountValue.setText(value + "");
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
免责声明 这是一个非常快速的解决方案,因此您可能需要探索其他错误处理。但基本思想是,获取输入,将其转换为 100 的百分比。
祝你好运,编码愉快!