我有一个简单的高尔夫记分卡应用程序我正在开发。我现在有9个文本视图,你可以在其中输入一个分数洞。输入分数时,如果低于标准,则TextView背景变为绿色,如果高于标准,则变为红色,如果是,则变为白色。 IU已经使用TextWatchers完成了这项工作。
我有一个清晰的所有Fields类,它清除了所有始终有效的文本视图。但是因为我为分数添加了textwatchers,所以我发现所有textViews都停止了工作。程序崩溃了。
这是我清楚的所有TextView代码,
public class clearButtonListner实现OnClickListener {
private Activity activity;
public clearButtonListner(Activity activity){
this.activity = activity;
}
@Override
public void onClick(View v) {
TextView et1 = (TextView)this.activity.findViewById(R.id.EditTextScore1);
TextView et2 = (TextView)this.activity.findViewById(R.id.EditTextScore2);
TextView et3 = (TextView)this.activity.findViewById(R.id.EditTextScore3);
TextView et4 = (TextView)this.activity.findViewById(R.id.EditTextScore4);
TextView et5 = (TextView)this.activity.findViewById(R.id.EditTextScore5);
TextView et6 = (TextView)this.activity.findViewById(R.id.EditTextScore6);
TextView et7 = (TextView)this.activity.findViewById(R.id.EditTextScore7);
TextView et8 = (TextView)this.activity.findViewById(R.id.EditTextScore8);
TextView et9 = (TextView)this.activity.findViewById(R.id.EditTextScore9);
TextView ettotal = (TextView)this.activity.findViewById(R.id.editTextTotalScore);
et1.setText("");
et2.setText("");
et3.setText("");
et4.setText("");
et5.setText("");
et6.setText("");
et7.setText("");
et8.setText("");
et9.setText("");
ettotal.setText("");
}
}
我的一个textWatchers的例子, 公共类textWatcher1实现TextWatcher {
private Activity activity;
public textWatcher1(Activity activity){
this.activity = activity;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
int p1 = 5;
// Create my TextViews
TextView et1 = (TextView)this.activity.findViewById(R.id.EditTextScore1);
int s1 = (int)(Integer.parseInt(et1.getText().toString()));
if(s1 < p1){
et1.setBackgroundColor(Color.GREEN);
}
else if(s1 > p1){
et1.setBackgroundColor(Color.RED);
}
else if(s1 == p1){
et1.setBackgroundColor(Color.WHITE);
}
}
}
任何帮助都会很棒。应用程序崩溃时抛出新的NumberFormatException(&#34;无效的int:\&#34;&#34; + s +&#34;&#34;&#34;);异常。
答案 0 :(得分:0)
这是因为在使用EditTexts
点击删除了所有Button
之后,系统会调用afterTextChanged(Editable s)
回调。我们希望EditText
上有一些内容,但却找不到任何内容,从而在Exception
中抛出parseInt()
。
你只需添加一个条件来执行该代码,这是,只有当文本的长度大于0.这样你就可以防止回调在清除{{1}后使你的应用程序崩溃}。
因此,只需在EditTexts
:
afterTextChanged(Editable s)
我建议您只填充那些可转换为数字的内容 if(s.length()>0){
//your existing code
}
,否则您将再次获得EditTexts
。