在 edittext 字段 1 和 2 中输入数据后更新 TextView
Update TextView after data is entered in edittext field 1 and 2
我正在使用 Tablelayout 并且我正在实用地添加 5 行。
每行有 4 列,在 pos 0 处的 Textview 描述,在 pos 1 和 2 处的 2 个 edittext attempt & made views,最后在 pos 3 处的 TextView pct。
当用户在编辑文本尝试中提供输入时,只有那时我想在 textview pct.
中计算 madeET/attemptET * 100 和 setText
这是目前的代码。期望的结果只发生在第 6 行的最终输入上。我已经在 madeET
和 setOnFocusChangeListener
上尝试了 addTextChangedListener
private void setTableRows(){
String[] desc = new String[]{"Flat level putts","Uphill putts","Downhill putts","Left-to-right putts","Right-to-left putts"};
int totalputts = 0;
for (int i=0;i<desc.length;i++){
TableRow tr = new TableRow(this);
TextView descTV = new TextView(this);
descTV.setText(desc[i]);
descTV.setTag(i);
descTV.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
descTV.setPadding(5, 0, 0, 0);
tr.addView(descTV);
final TextView pctMade = new TextView(this);
pctMade.setGravity(Gravity.CENTER);
pctMade.setTag("pct"+i);
//pctMade.setText(String.valueOf(pctmadecalc));
pctMade.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
pctMade.setPadding(5, 0, 0, 0);
final EditText madeET = new EditText(this);
madeET.setInputType(InputType.TYPE_CLASS_NUMBER);
madeET.setTag("m"+i);
madeET.setFilters(new InputFilter[]{new GolfAppUtils.InputFilterMinMax("0","10")});
madeET.setGravity(Gravity.CENTER);
madeET.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
madeET.setPadding(5, 0, 0, 0);
final int finalI = i;
madeET.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
/*if(s.length() > 0){
double pctmadecalc = Integer.parseInt(s.toString()) / PUTTS_PER_CATEGORY;
}*/
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
pctMade.setText(null);
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() > 0) {
//calcPct(finalI);
//float pctmadecalc = (((float)(Integer.parseInt(s.toString()))) / ((float) PUTTS_PER_CATEGORY)) * 100;
/*NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(4);
df.setRoundingMode(RoundingMode.DOWN);*/
//Toast.makeText(getBaseContext(), String.valueOf(pctmadecalc), Toast.LENGTH_SHORT).show();
//pctMade.setText(String.valueOf(String.format("%.2f",pctmadecalc)));
}
}
});
madeET.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
calcPct();
}
});
EditText attemptET = new EditText(this);
attemptET.setInputType(InputType.TYPE_CLASS_NUMBER);
attemptET.setTag("a"+i);
attemptET.setFilters(new InputFilter[]{new GolfAppUtils.InputFilterMinMax("0","10")});
attemptET.setGravity(Gravity.CENTER);
attemptET.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
attemptET.setPadding(5, 0, 0, 0);
/*attemptET.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
*//*if(s.length() > 0){
double pctmadecalc = Integer.parseInt(s.toString()) / PUTTS_PER_CATEGORY;
}*//*
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
pctMade.setText(null);
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() > 0) {
float pctmadecalc = (((float)(Integer.parseInt(s.toString()))) / ((float) PUTTS_PER_CATEGORY)) * 100;
*//*NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(4);
df.setRoundingMode(RoundingMode.DOWN);*//*
//Toast.makeText(getBaseContext(), String.valueOf(pctmadecalc), Toast.LENGTH_SHORT).show();
pctMade.setText(String.valueOf(String.format("%.2f",pctmadecalc)));
}
}
});*/
tr.addView(attemptET);
tr.addView(madeET);
tr.addView(pctMade);
table.addView(tr);
}
}
private void calcPct() {
EditText attempt = null,made = null;
TextView pct = null;
/*TableRow row = (TableRow) table.getChildAt(pos);
attempt = (EditText) row.findViewWithTag("a" + pos);
made = (EditText) row.findViewWithTag("m" + pos);
pct = (TextView) row.findViewWithTag("pct" + pos);*/
for(int i = 1, j = table.getChildCount(); i < j; i++) { //i=0 is header
TableRow row = (TableRow)table.getChildAt(i);
attempt = (EditText) row.getChildAt(1);
made = (EditText) row.getChildAt(2);
pct = (TextView) row.getChildAt(3);
}
if (!TextUtils.isEmpty(attempt.getText())) {
if (!TextUtils.isEmpty(made.getText())) {
float pctmadecalc = ((float) Integer.parseInt(made.getText().toString()) /
((float) Integer.parseInt(attempt.getText().toString()))) * 100;
//Toast.makeText(getBaseContext(), String.valueOf(pctmadecalc), Toast.LENGTH_SHORT).show();
pct.setText(String.valueOf(String.format("%.2f", pctmadecalc)));
}
}
}
在此先感谢您的帮助
以下回复的解决方案
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() > 0) {
pctMade.setText("");
float pctmadecalc = ((float) Integer.parseInt(madeET.getText().toString()) /
((float) Integer.parseInt(attemptET.getText().toString()))) * 100;
//Toast.makeText(getBaseContext(), String.valueOf(pctmadecalc), Toast.LENGTH_SHORT).show();
pctMade.setText(String.valueOf(String.format("%.2f", pctmadecalc)));
//pctMade.setText(calcPct());
} else {
pctMade.setText("");
}
}
它将是这样的:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
pctMade.setText("");
pctMade.setText(s);
//etc..
}
我正在使用 Tablelayout 并且我正在实用地添加 5 行。 每行有 4 列,在 pos 0 处的 Textview 描述,在 pos 1 和 2 处的 2 个 edittext attempt & made views,最后在 pos 3 处的 TextView pct。 当用户在编辑文本尝试中提供输入时,只有那时我想在 textview pct.
中计算 madeET/attemptET * 100 和setText
这是目前的代码。期望的结果只发生在第 6 行的最终输入上。我已经在 madeET
和 setOnFocusChangeListener
addTextChangedListener
private void setTableRows(){
String[] desc = new String[]{"Flat level putts","Uphill putts","Downhill putts","Left-to-right putts","Right-to-left putts"};
int totalputts = 0;
for (int i=0;i<desc.length;i++){
TableRow tr = new TableRow(this);
TextView descTV = new TextView(this);
descTV.setText(desc[i]);
descTV.setTag(i);
descTV.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
descTV.setPadding(5, 0, 0, 0);
tr.addView(descTV);
final TextView pctMade = new TextView(this);
pctMade.setGravity(Gravity.CENTER);
pctMade.setTag("pct"+i);
//pctMade.setText(String.valueOf(pctmadecalc));
pctMade.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
pctMade.setPadding(5, 0, 0, 0);
final EditText madeET = new EditText(this);
madeET.setInputType(InputType.TYPE_CLASS_NUMBER);
madeET.setTag("m"+i);
madeET.setFilters(new InputFilter[]{new GolfAppUtils.InputFilterMinMax("0","10")});
madeET.setGravity(Gravity.CENTER);
madeET.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
madeET.setPadding(5, 0, 0, 0);
final int finalI = i;
madeET.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
/*if(s.length() > 0){
double pctmadecalc = Integer.parseInt(s.toString()) / PUTTS_PER_CATEGORY;
}*/
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
pctMade.setText(null);
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() > 0) {
//calcPct(finalI);
//float pctmadecalc = (((float)(Integer.parseInt(s.toString()))) / ((float) PUTTS_PER_CATEGORY)) * 100;
/*NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(4);
df.setRoundingMode(RoundingMode.DOWN);*/
//Toast.makeText(getBaseContext(), String.valueOf(pctmadecalc), Toast.LENGTH_SHORT).show();
//pctMade.setText(String.valueOf(String.format("%.2f",pctmadecalc)));
}
}
});
madeET.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
calcPct();
}
});
EditText attemptET = new EditText(this);
attemptET.setInputType(InputType.TYPE_CLASS_NUMBER);
attemptET.setTag("a"+i);
attemptET.setFilters(new InputFilter[]{new GolfAppUtils.InputFilterMinMax("0","10")});
attemptET.setGravity(Gravity.CENTER);
attemptET.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
attemptET.setPadding(5, 0, 0, 0);
/*attemptET.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
*//*if(s.length() > 0){
double pctmadecalc = Integer.parseInt(s.toString()) / PUTTS_PER_CATEGORY;
}*//*
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
pctMade.setText(null);
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() > 0) {
float pctmadecalc = (((float)(Integer.parseInt(s.toString()))) / ((float) PUTTS_PER_CATEGORY)) * 100;
*//*NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(4);
df.setRoundingMode(RoundingMode.DOWN);*//*
//Toast.makeText(getBaseContext(), String.valueOf(pctmadecalc), Toast.LENGTH_SHORT).show();
pctMade.setText(String.valueOf(String.format("%.2f",pctmadecalc)));
}
}
});*/
tr.addView(attemptET);
tr.addView(madeET);
tr.addView(pctMade);
table.addView(tr);
}
}
private void calcPct() {
EditText attempt = null,made = null;
TextView pct = null;
/*TableRow row = (TableRow) table.getChildAt(pos);
attempt = (EditText) row.findViewWithTag("a" + pos);
made = (EditText) row.findViewWithTag("m" + pos);
pct = (TextView) row.findViewWithTag("pct" + pos);*/
for(int i = 1, j = table.getChildCount(); i < j; i++) { //i=0 is header
TableRow row = (TableRow)table.getChildAt(i);
attempt = (EditText) row.getChildAt(1);
made = (EditText) row.getChildAt(2);
pct = (TextView) row.getChildAt(3);
}
if (!TextUtils.isEmpty(attempt.getText())) {
if (!TextUtils.isEmpty(made.getText())) {
float pctmadecalc = ((float) Integer.parseInt(made.getText().toString()) /
((float) Integer.parseInt(attempt.getText().toString()))) * 100;
//Toast.makeText(getBaseContext(), String.valueOf(pctmadecalc), Toast.LENGTH_SHORT).show();
pct.setText(String.valueOf(String.format("%.2f", pctmadecalc)));
}
}
}
在此先感谢您的帮助
以下回复的解决方案
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() > 0) {
pctMade.setText("");
float pctmadecalc = ((float) Integer.parseInt(madeET.getText().toString()) /
((float) Integer.parseInt(attemptET.getText().toString()))) * 100;
//Toast.makeText(getBaseContext(), String.valueOf(pctmadecalc), Toast.LENGTH_SHORT).show();
pctMade.setText(String.valueOf(String.format("%.2f", pctmadecalc)));
//pctMade.setText(calcPct());
} else {
pctMade.setText("");
}
}
它将是这样的:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
pctMade.setText("");
pctMade.setText(s);
//etc..
}