Reputation: 1973
I'm new to android and am writing a simple app that calculates the distance left to the hole after a shot. Everything runs with out errors or warnings but I can't seem to get the editText values to be stored in the variables. What am I doing wrong? The comments in the code are other things Ive tried. thanks for the help.
package my.pckg.ezgolf;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;
public class EZGolfActivity extends Activity {
/** Called when the activity is first created. */
int hole_length;
int shot_length;
int dist_remain;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int dist_remain = hole_length - shot_length;
final EditText edittext = (EditText) findViewById(R.id.editText1);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
//Toast.makeText(EZGolfActivity.this, edittext.getText(), Toast.LENGTH_SHORT).show();
hole_length = Integer.parseInt(edittext.getText().toString());
return true;
}
return false;}
TextView myTextView = (TextView) findViewById(R.id.textView4);
myTextView.setText("You have this many feet to the pin: " + dist_remain);
});
final EditText edittext2 = (EditText) findViewById(R.id.editText2);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
//Toast.makeText(EZGolfActivity.this, edittext.getText(), Toast.LENGTH_SHORT).show();
shot_length = Integer.parseInt(edittext2.getText().toString());
return true;
}
return false;}
//TextView myTextView = (TextView) findViewById(R.id.textView4);
//myTextView.setText("You have this many feet to the pin: " + dist_remain);
//int dist_remain = hole_length - shot_length;
TextView myTextView = (TextView) findViewById(R.id.textView4);
myTextView.setText("You have this many feet to the pin: " + dist_remain);
});
//int dist_remain = hole_length - shot_length;
//TextView myTextView = (TextView) findViewById(R.id.textView4); myTextView.setText("You have this many feet to the pin: " + dist_remain);
}
}
Upvotes: 0
Views: 970
Reputation: 3221
You could try using the addTextChangedListener
method of the EditText.
EditText txt_value = (EditText) findViewById(R.id.txt_value);
txt_value.addTextChangedListener(new TextWatcher()
{
public void afterTextChanged (Editable s)
{
//Log.d("after", "afterTextChanged");
}
public void beforeTextChanged (CharSequence s, int start, int count, int after)
{
//Log.d("before", "beforeTextChanged");
}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
txt_value.removeTextChangedListener(this);
String textValue = s.toString();
int intValue = Integer.parseInt(textValue);
}
});
Upvotes: 0
Reputation: 708
Seems, that your calculation and the update of myTextView are only called once at the initialization of the Activity. You have to move the calculation and call to myTextView.setText into the KeyListeners. This is untested, but I think, this will work. At least the syntax erorrs should be fixed. As you can see, the calculation is done each time the enter button is pressed and only then the text view is updated.
public class EZGolfActivity extends Activity {
/** Called when the activity is first created. */
int hole_length;
int shot_length;
int dist_remain;
TextView myTextView = (TextView) findViewById(R.id.textView4);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText edittext = (EditText) findViewById(R.id.editText1);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
// Toast.makeText(EZGolfActivity.this, edittext.getText(), Toast.LENGTH_SHORT).show();
hole_length = Integer.parseInt(edittext.getText().toString());
int dist_remain = hole_length - shot_length;
myTextView.setText("You have this many feet to the pin: " + dist_remain);
return true;
}
return false;
}
});
final EditText edittext2 = (EditText) findViewById(R.id.editText2);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
// Toast.makeText(EZGolfActivity.this, edittext.getText(), Toast.LENGTH_SHORT).show();
shot_length = Integer.parseInt(edittext2.getText().toString());
int dist_remain = hole_length - shot_length;
myTextView.setText("You have this many feet to the pin: " + dist_remain);
return true;
}
return false;
}
});
}
}
Upvotes: 1
Reputation: 437
I don't think you want to use getInteger. You were on a better path with parseInt:
Why does int num = Integer.getInteger("123") throw NullPointerException?
Upvotes: 0
Reputation: 15701
I have one point not big one
you have set setOnKeyListener both time for edittext
Upvotes: 0