2014-02-05 2 views
1

안녕하세요 저는 Android에서 계산기로 작업 중입니다. wchich에서 EditText를 사용하고 있지 않습니다. 특정 no.for의 클릭에 따라 표시됩니다. 예를 들어, 사용자가 1을 누르면, 1.now가 표시되고, 사용자가 2를 클릭하면 12가 표시됩니다.버튼을 클릭하면 Android에서 EditText에서 텍스트를 가져 오는 중

내가이

public class Main extends Activity implements OnClickListener { 

    public static int no1=0,no2=0,op=0,flag=0; 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    EditText display1=(EditText) findViewById(R.id.display);  


    Button one= (Button) findViewById(R.id.one); 
    one.setOnClickListener(this); 
    } 


public void onClick(View v) { 

    if(v.getId()==R.id.one) 
    { 
     switch(flag) 
     { 
     case 1:no1*=10+1;display1.setText(no1); 
     case 2:no2*=10+1;display1.setText(no2); 
     } 


    } 

같은 것들을 가지고 있지만 여기에 내가 "디스플레이 1가 해결 될 수 없다"로 오류를 얻고있다.

작업을 만드는 모든 솔루션 .. ??

+0

텍스트를 가져 오거나 텍스트를 설정하고 싶습니다. – Manmohan

+0

@nikhil은 edittext를 전역 적으로 선언합니다. –

답변

1

때때로 완전한 코드 예제 도움 :

public class Main extends Activity implements OnClickListener { 

    private int no1=0; 
    private int no2=0; 
    private int op=0; 
    private int flag=0; 
    private EditText display1; 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    display1=(EditText) findViewById(R.id.display);  


    Button one= (Button) findViewById(R.id.one); 
    one.setOnClickListener(this); 
    } 


    public void onClick(View v) { 

     if(v.getId()==R.id.one) 
     { 
     switch(flag) 
     { 
     case 1:no1*=10+1;display1.setText(no1); 
     case 2:no2*=10+1;display1.setText(no2); 
     } 


    } 
} 

은 기본적으로 당신이 개인 인스턴스 변수로 디스플레이 1을 선언하려는 당신이 그것을 보여주는 것 번호를 사용하려면, 다음과 같은 코드를 사용할 수 있습니다. 다른 변수는 정적 일 필요가 없으며 아마도 private로 선언되어야합니다. 또한 가독성을 높이기 위해 별도의 줄로 형식을 지정했습니다.

재미있게 보내십시오.

1

onCreate 메소드에서만 사용할 수 있기 때문에. 클래스의 필드로 선언하십시오.

private EditText display1; 
+0

버튼과 edittext를 class.but에 던지려고했는데 null 포인터 예외가 던졌습니다. – nikhil

+0

전체 초기화를 클래스로 옮겼습니까? 당신은 edittext 만 움직였습니다. 답장을 했는데도 그랬습니다 : display1 = (EditText) findViewById (R.id.display); oncreate 메소드에서. – EarlOfEgo

+0

나는 코드를 어느 부분에서 동일한 런타임 오류 – nikhil

0

EditText와 Button을 모두 전역으로 선언하십시오.

0

추가 및 지우기가 어려워지지 않도록 EditText에 문자열을 표시하는 것이 좋습니다. 그런 다음 그것을 정수로 파싱하여 수학과 수학을 할 수 있습니다. 당신이 번호로 설정 단추 레이블이있는 경우

public class Main extends Activity implements OnClickListener { 
    private EditText display1 = (EditText) findViewById(R.id.display);  
    private Button one= (Button) findViewById(R.id.one); 
    private Button two= (Button) findViewById(R.id.two);  

는이처럼 사용할 수 있습니다 :

public void onClick(View view){ 
    display1.setText(display1.getText.toString() + ((Button) view).getText().toString()); 
}  

그런 식으로, 당신을

첫째로 당신은 당신의 버튼과 세계적으로 편집 텍스트를 선언해야 디스플레이의 문자열 끝에 숫자를 추가 할 수 있습니다.

int number = Integer.parseInt(display1.getText().toString()); 
+1

인스턴스가 생성 될 때 findViewById를 호출하면 Activity 라이프 사이클을 완전히 우회합니다. 이 코드가 작동하더라도 놀랍습니다 (아마 NPE를 던집니다). –

+0

@JStevenPerry 당신 말이 맞아요. 그들은 오직 거기에서 선언되어야하고 onCreate 메소드에서 findViewById()를 호출해야합니다. 그것을 지적 주셔서 감사합니다. – rodolfosrg

관련 문제