Android EditText或可能的OnClickEvent问题

3

我已经浏览了大量的问题,但是没有找到一个有效的答案。无论如何,我是一个新手,对于安卓/Java编程不熟悉,无法通过按钮的onClick事件获取EditText中的内容并进行相应的操作(?), 我认为这是我的问题,以下是我的代码:

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    public class Fittings extends Activity implements OnClickListener{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button go = (Button)findViewById(R.id.GoButton);
    go.setOnClickListener(this);

}

public void onClick(View v) {
    EditText circum = (EditText)findViewById(R.id.CtoD);
    int C = Integer.parseInt(circum.getText().toString());
    TextView CtoDAnswer = (TextView)findViewById(R.id.CtoDAnswer);      
    CtoDAnswer.setText((int) (C * 0.3183));

}

}


只需尝试 go.setOnClickListener(Fittings.this); - Sumant
3个回答

2
您正在使用CtoDAnswer.setText((int) (C * 0.3183));,它不会将一个字符串与该数字相加,而是将具有该ID的资源添加到其中。由于您没有一个字符串资源c*0.3183,因此您将无法得到正确的答案。
请使用CtoDAnswer.setText(Integer.toString(C * 0.3183)); 可以在此处查看该方法的API参考:http://developer.android.com/reference/android/widget/TextView.html#setText%28int%29
作为第二个评论(这与您的问题无关,但是关于良好实践和应用程序效率的建议):不要每次单击按钮时都充气资源,而是在onCreate中充气它,并使用类字段存储它。例如:
EditText circum;
// 

public void onCreate(Bundle savedInstanceState) {
circum = (EditText)findViewById(R.id.CtoD);
//
public void onClick(View v) {
    int C = Integer.parseInt(circum.getText().toString());

1
仅澄清一下,1)可能是导致您的EditText未能正确显示文本的原因。 - dmon
@dmon 你说得对,一开始的部分并没有清楚地回答问题。我进行了编辑以使其更加明显。谢谢。 - Aleadam
好的,我会尝试将所有内容混合在一起,因为我还在学习中 :P int类型可以有小数吗?我认为这可能是问题的一部分,我通过以下方式使一切正常: - Scott Miller
public void onClick(View v) { EditText circum = (EditText)findViewById(R.id.CtoD); double C = Integer.parseInt(circum.getText().toString()); TextView CtoDAnswer = (TextView)findViewById(R.id.CtoDAnswer); double answer = (C * 0.3183); CtoDAnswer.setText(": " + answer); } - Scott Miller
@Scott 是的,那应该可以。将其转换为 int 将会移除所有小数部分(int 意味着整数)。在引号内添加冒号将整个参数变成字符串,因此它会按照你的期望工作。 - Aleadam

0
我认为你只需要在你的方法onClick(View v)前面添加@Override就可以了,像这样:
@Override
public void onClick(View v){
    //do stuff 
    EditText circum = (EditText)findViewById(R.id.CtoD);
    int C = Integer.parseInt(circum.getText().toString());
    TextView CtoDAnswer = (TextView)findViewById(R.id.CtoDAnswer);      
    CtoDAnswer.setText(Integer.toString(C * 0.3183));//this will Fix the problem
    String txtCentent = myEditText.getText():
    Log.i("Content EditText"," Content = "+txtContent);
}

最佳实践:

最好在onCreate方法中获取所有视图,因为每次单击按钮时,都会尝试通过ID查找视图,这样会有一定的重复。


添加 @Override 注释是一个好习惯,但它是可选的。它不会改变方法的结果。 - Aleadam
我有同样的问题,我正在编写一个应用程序,我没有在我的方法中添加 @Override,直到我添加它才起作用 :),他的代码问题是他试图将 int 放入 EditText 中,请参见我的编辑。 - Houcine
如果应用程序打开时并不总是使用该按钮,将视图保留在按钮内而不是onCreate中是否更好?我认为按钮被使用的机会大约是50/50。 - Scott Miller

0
public void onClick(View v) {
    EditText circum = (EditText)findViewById(R.id.CtoD);
    double C = Integer.parseInt(circum.getText().toString());
    TextView CtoDAnswer = (TextView)findViewById(R.id.CtoDAnswer);      
    double answer = (C * 0.3183);
    CtoDAnswer.setText(": " + answer);

这是我想出来的,但根据建议,有些东西将被移动,谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接