如何使用EditText中的值更改TextView

时间:2013-06-20 23:33:58

标签: android textview android-edittext

我对App制作完全陌生,我想制作一些有两个EditTexts(仅限数字)的东西,然后将它们分割并转换成百分比并显示在TextView中。不幸的是,我不知道我在做什么是正确的。这是我的代码

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.widget.EditText;
    import android.widget.TextView;
    public class FirstInformation extends Activity {

EditText eT4 = (EditText)findViewById(R.id.editText4);
EditText eT5 = (EditText)findViewById(R.id.editText5);
TextView tV6 = (TextView)findViewById(R.id.textView6);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first_information);
    if (eT4 != null && eT5 != null){
        double numerator = (double) Integer.parseInt(eT4.getText().toString());
        double denominator = (double) Integer.parseInt(eT5.getText().toString());
        double textView = Math.round(numerator/denominator)*100;
        tV6.setText(textView+"");
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.first_information, menu);
    return true;    
}


public void updateTextView() {
    if (eT4 != null && eT5 != null){
        double numerator = (double) Integer.parseInt(eT4.getText().toString());
        double denominator = (double) Integer.parseInt(eT5.getText().toString());
        double textView = Math.round(numerator/denominator)*100;
        tV6.setText(textView+"");
    }
    return;
}

}

任何反馈都会很棒。非常感谢你!

3 个答案:

答案 0 :(得分:0)

findViewById()

中的

onCreate()

Division by zero

答案 1 :(得分:0)

您的问题在于以下代码:

EditText eT4 = (EditText)findViewById(R.id.editText4);
EditText eT5 = (EditText)findViewById(R.id.editText5);
TextView tV6 = (TextView)findViewById(R.id.textView6);

findViewById方法为所有这些调用返回null,因为您在setContentView方法完成之前正在执行与UI相关的任务。因此,您可以在那里声明变量,然后在setContentView方法之后初始化它们。

答案 2 :(得分:0)

正如其他人所说,findViewById()调用进入onCreate()方法,否则它们将返回null。

另一件事:永远不会调用updateTextView()。您可以使用TextWatcher或仅使用onClickListener:

tv6.setOnClickListener(new onClickListener() {
    @Override
    public void onClick(View v) {
        updateTextView();
    }
});

每次单击结果textView时,结果都会更新。顺便说一句,使用TextWatcher(使用afterTextChanged()方法)是一种更好的做法。我建议你参考指南/教程并尝试一下;)