2016-11-11 3 views
0

이것은 내 코드이므로 임의 값 (0에서 1 사이)을 인쇄해야하지만 그렇게하지는 않습니다!TextView에 텍스트가 표시되지 않습니다.

나는 그것을 고치는 법을 모른다. 나는 여러 가지를 시도했다, 그들 중의 누구도 일하고 ​​있지 않다!

package com.example.lode.coder; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.TextView; 

import java.util.Random; 

public class Coder extends AppCompatActivity { 
    TextView display; 
    String one; 
    boolean bl= true; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_coder); 
     display = (TextView) findViewById(R.id.text); 
    } 
    void all() { 
     while (bl) { 
      Random rand = new Random(); 
      int n = rand.nextInt(2); 
      one = n + (String) display.getText(); 
      display.setText(one); 
     } 
    } 
} 
+0

어디에서 all() 메서드를 호출합니까? –

답변

2

당신은 표시되지 않습니다 all() 메소드가 호출 :

여기에 코드입니다. 아무데도 호출되지 않으면 그 이유는 display이 텍스트 세트를 얻지 못하는 이유를 설명합니다.

그러나 어딘가에 호출된다고 가정하면 여전히 큰 문제가 있습니다. all() 메서드는 무한 루프입니다. 프레임 워크로 제어권을 되돌릴 때까지 display에 대한 변경 사항이 화면에 표시되지 않습니다. (실제로 앱이 응답하지 않을 때 프레임 워크에 의해 앱이 종료 될 수 있습니다.)

텍스트를 계속 변경하려면 Handler을 사용합니다. 실제 변경을 수행 한 Runnable을 만든 다음 잠시 후에 다시 실행되도록 일정을 조정할 수 있습니다. 현재 가지고있는 루프를 all()에 사용하지 마십시오.

이런 식으로 뭔가가 작동합니다 :

public class Coder extends AppCompatActivity { 
    private static long UPDATE_INTERVAL = 500; // every half second -- adjust as needed 
    TextView display; 
    String one; 
    Handler handler; 
    Runnable updater; 
    Random rand = new Random(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_coder); 
     display = (TextView) findViewById(R.id.text); 
     Handler handler = new Handler(); 
     updater = new Runnable() { 
      @Override public void run() { 
       int n = rand.nextInt(2); 
       one = n + display.getText().toString(); 
       display.setText(one); 
       handler.postDelayed(updater, UPDATE_INTERVAL); 
      } 
     } 
    } 
    @Override protected void onStart() { // or override onResume() instead 
     super.onStart(); 
     startUpdates(); 
    } 
    @Override protected void onStop() { // or override onPause() instead 
     super.onStop(); 
     stopUpdates(); 
    } 
    void startUpdates() { 
     handler.post(updater); 
    } 
    void stopUpdates() { 
     handler.removeCallbacks(updater); 
    } 
} 
1

당신은 모든() 함수 어디서나 호출되지 않은, 심지어 당신이 할 경우 BL 항상 true를 유지할 때문에 while 루프이기 때문에, 논리는 여전히 잘못된 것 멈추지 않는 무한 루프. 이 코드를 사용해보십시오 :

public class Coder extends AppCompatActivity { 
    TextView display; 
    String one; 
    boolean bl= true; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_coder); 
     display = (TextView) findViewById(R.id.text); 
     all(); 
    } 
    void all() { 

      Random rand = new Random(); 
      int n = rand.nextInt(2); 
      one = n + display.getText().toString(); 
      display.setText(one); 

      } 
} 

루프를 원하면 루프를 멈추게하기 위해 bl 변수를 false로 설정해야합니다.

+1

나는 당신이'display.getText(). toString()'을 의미한다고 생각하니? –

+0

O 예, 이것을 편집하겠습니다! 수정 주셔서 감사! – Jordan

관련 문제