2014-04-25 60 views
-1

我的目標是當用戶點擊開始按鈕,字母「o」「n」「o」「m」等將出現在屏幕的中心。 「o」將首先出現,幾秒後將被「n」,然後「o」等替換。Android dev't使用textview的線程:爲什麼這是崩潰?

注意:爲簡潔起見,我只是首先將guessword = onomatopoeia。實際上,每當我點擊開始底部時,guessword都會改變。

這是代碼:

private String guessword = "onomatopoeia"; 
private TextView showchar; 
private int n = guessword.length(); 
private char letArray[]= guessword.toCharArray();; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_play); 

    addStartListener(); 

} 

public void addStartListener(){ 
    Button start = (Button) findViewById(R.id.start); 
    showchar = (TextView) findViewById (R.id.charView); 

    start.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      Thread thread = new Thread() 
      { 
       @Override 
       public void run() { 
        try { 
         for(int i = 0 ; i < n ; i++) { 
          sleep(1000); 
          showchar.setText(letArray[i]); 
         } 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      }; 

      thread.start(); 

     } 



    }); 

} 

感謝您的幫助

我決定實現runonuithread但仍崩潰:

這是更新的版本:

private String guessword = "onomatopoeia"; 
private TextView showchar; 
private int n = guessword.length(); 
private char letArray[]= guessword.toCharArray(); 
private Handler handler; 
private int i = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_play); 
    handler = new Handler(); 
    showchar = (TextView) findViewById (R.id.charView); 
} 

public void startGame(View view){ 
    new Thread() { 
     public void run() { 
      while(i++ < n) { 
       try { 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          showchar.setText(letArray[i]); 
         } 
        }); 
        Thread.sleep(300); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }.start(); 

} 

回答

0

使用這種代碼在你的TextView設置文本

   runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         showchar.setText(letArray[i]); 
        } 
       }); 
0

您正在從不可能的線程更新ui。

showchar.setText(letArray[i]); 

UI必須更新UI線程。

您所做的只是將值重複設置爲TextView,您可以使用Handler來延遲此目的。

你也可以使用runOnUiThread,但我不認爲你需要做什麼線程。

使用處理程序。你可以找到一個例子@

Android Thread for a timer

相關問題