0

我对应用程序制作完全陌生,我想做一些有两个 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;
}

}

任何反馈都会很棒。太感谢了!

4

3 回答 3

0

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

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

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

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

于 2013-06-21T00:06:58.097 回答
0

findViewById()onCreate()

被零除

于 2013-06-20T23:52:18.307 回答
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方法之后初始化它们。

于 2013-06-20T23:52:39.160 回答