onTextChanged不起作用

时间:2014-07-18 12:05:15

标签: android eclipse

我需要这样的东西,当用户在editText部分输入数字时,应该同时向屏幕显示数字总数的模数。所以我使用onTextChanged,我将字符转换为int并将此值设置为a TextView.It没有工作。问题可能是由于将字符序列转换为int而发生的。

    editText1=(EditText) findViewById(R.id.editText1);
    editText1.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {
           }

           public void beforeTextChanged(CharSequence s, int start, int count, int after          {
           }

           public void onTextChanged(CharSequence s, int start,int before, int count) {
           TextView showNumber = (TextView) findViewById(R.id.showNumber);
           int i=0;
           int n= Integer.parseInt(s.toString());
           i=(i+n)%10;
           showNumber.setText(i);
    }});

5 个答案:

答案 0 :(得分:2)

好的,对Android文档的快速研究表明,EditText扩展了TextView这个方法:

public final void setText (int resid)

您作为[{1}}方法的参数传递的i属于setText()类型,这意味着它被用作要转换为文本的资源ID。它无法在int中找到具有此ID的资源,因此我认为它崩溃了。

您需要做的是将string.xml转换为i并将其传递给CharSequence方法,如下所示:

setText()

答案 1 :(得分:1)

尝试

showNumber.setText(String.valueOf(i));

根据您的代码,您正在初始化i = 0。无需将n添加到i,因为它始终为zero

答案 2 :(得分:1)

在onCreate()

中声明textview

试试这个:

    editText.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {

           }

           public void beforeTextChanged(CharSequence s, int start, int count, int after)          {
           }

           public void onTextChanged(CharSequence s, int start,int before, int count) {
                int n= Integer.valueOf(s.toString().trim());
                   i=(i+n)%10;
                   textView.setText(""+i);
           }});

答案 3 :(得分:1)

请尝试这种方式,希望这有助于您解决问题。

<强> main.xnl

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <EditText
        android:id="@+id/edtInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/txtModulo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"/>


</LinearLayout>

<强> MyActivity.java

public class MyActivity extends Activity{

    private EditText edtInput;
    private TextView txtModulo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        edtInput = (EditText) findViewById(R.id.edtInput);
        txtModulo = (TextView) findViewById(R.id.txtModulo);

        edtInput.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if(s.toString().trim().length()>0){
                    txtModulo.setText(String.valueOf((Integer.parseInt(s.toString().trim())%10)));
                }else{
                    txtModulo.setText("");
                }

            }
        });
    }
}

答案 4 :(得分:1)

试试这个,

 ditText1=(EditText) findViewById(R.id.editText1);
   ditText1.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {
       }

       public void beforeTextChanged(CharSequence s, int start, int count, int after          {
       }

       public void onTextChanged(CharSequence s, int start,int before, int count) {
       TextView showNumber = (TextView) findViewById(R.id.showNumber);
       int i=0;
       int n= Integer.parseInt(ditText1.getText().toString());
       i=(i+n)%10;
       showNumber.setText(Integer.toString(i));
}});