2012-06-16 3 views
0

저는 Android를 처음 사용하고 있으며 촬영 후 구멍까지 남은 거리를 계산하는 간단한 앱을 작성하고 있습니다. 모든 것은 오류나 경고없이 실행되지만 editText 값을 변수에 저장하는 것처럼 보이지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 코드의 주석은 필자가 시도한 다른 것들이다. 도와 주셔서 감사합니다.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); 

} 

}

답변

1

이 보인다 글고 치기 위해 setOnKeyListener 모두 시간을 설정하여 계산 및 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; 
      } 
     }); 
    } 
} 
+0

구문 오류가 발생했습니다. 뷰를 다시로드해야합니까? –

+0

아니요,보기를 다시로드하지 않아도됩니다. setText를 호출하면 뷰가 즉시 업데이트됩니다. 이름을 지정하지 않으면 구문 오류로 인해 도움을받을 수 없습니다. 토큰에 – henrik

+0

구문 오류가 AnnotationName 대신 \t 예상 - 구문 오류, \t 다음은 이러한 오류가 어색 당신의 도움 –

0

난 당신이,

0

당신은 글고의 addTextChangedListener 방법을 사용하여 시도 할 수 있습니다.

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); 
     } 
    }); 
관련 문제