0

私はアンドロイドが初めてで、ショット後に穴までの距離を計算する簡単なアプリを書いています。すべてがエラーや警告なしで実行されますが、変数に格納される editText 値を取得できないようです。私は何を間違っていますか?コード内のコメントは、私が試した他のものです。助けてくれてありがとう。

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);

}

}

4

4 に答える 4

1

あなたの計算と myTextView の更新は、アクティビティの初期化時に一度だけ呼び出されるようです。計算を移動し、myTextView.setText を KeyListeners に呼び出す必要があります。これはテストされていませんが、うまくいくと思います。少なくとも構文エラーは修正する必要があります。ご覧のとおり、入力ボタンが押されるたびに計算が行われ、その後にのみテキスト ビューが更新されます。

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;
            }
        });
    }
}
于 2012-06-16T16:23:49.573 に答える
0

私は大きなものではない1つのポイントを持っています

edittextの両方の時間にsetOnKeyListenerを設定しました

于 2012-06-16T16:22:06.583 に答える
0

getInteger を使用したくないと思います。あなたはparseIntでより良い道を歩んでいました:

int num = Integer.getInteger("123") が NullPointerException をスローするのはなぜですか?

于 2012-06-16T16:26:43.430 に答える
0

addTextChangedListenerEditTextのメソッドを使用してみることができます。

 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);
        }
    });
于 2012-06-18T14:20:21.010 に答える