自从我添加TextWatcher后无法清除TextView?

时间:2014-10-19 22:50:31

标签: java android textview textwatcher

我有一个简单的高尔夫记分卡应用程序我正在开发。我现在有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;);异常。

1 个答案:

答案 0 :(得分:0)

这是因为在使用EditTexts点击删除了所有Button之后,系统会调用afterTextChanged(Editable s)回调。我们希望EditText上有一些内容,但却找不到任何内容,从而在Exception中抛出parseInt()

你只需添加一个条件来执行该代码,这是,只有当文本的长度大于0.这样你就可以防止回调在清除{{1}后使你的应用程序崩溃}。

因此,只需在EditTexts

中添加此行
afterTextChanged(Editable s)

我建议您只填充那些可转换为数字的内容 if(s.length()>0){ //your existing code } ,否则您将再次获得EditTexts