2012-07-13 26 views
0

我的應用程序保持強制關閉。但Eclipse沒有顯示錯誤或警告控制textView

package com.example.pkg; 

import android.os.Bundle; 
import android.widget.TextView; 
import android.app.Activity; 

public class subActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sub); 
     Thread r = new Thread(new Runnable(){ 

         public void run() 
         { final TextView tv=(TextView)findViewById(R.id.rline1); 
          String s=(String)tv.getText(); 
          tv.setText(s+"Works !"); 
         } 
     }); 
     r.start(); 
    } 

} 

另一個Activity調用此Activity。那個顯示TextView。我想要做的就是更改在TextView上顯示的名爲R.string.rline1的字符串資源。請告訴我如何做到這一點,如果有另一種方式

+1

爲什麼你需要爲此線程 – AAnkit 2012-07-13 11:19:45

+0

爲什麼你想讓這個任務在線程中執行?任何具體原因。 – 2012-07-13 11:20:50

+0

UI組件必須在UI線程上更新! – 2012-07-13 11:26:37

回答

0

第一件事情,你必須要更新UI線程內GUI東西否則它不會有任何效果。第二件事你知道你有多少次創建文本視圖的實例並再次設置它,你在線程中,你沒有設置任何標誌來阻止你的線程,一旦你完成。例如對於UI線程:

 Runnable update_gui = new Runnable() { 
      @Override 
      public void run() { 
       final TextView tv=(TextView)findViewById(R.id.rline1); 
       String s=(String)tv.getText(); 
       tv.setText(s+"Works !"); 

      } 
     };runOnUiThread(update_gui); 
+0

^謝謝。我的理解是,我的問題的答案很難:你不能。未聚焦的活動不可更新:p並感謝runOnUiThread方法。如果當前活動是當前Screen,那麼是不是runOnUiThread就像在onCreate方法上運行它一樣? – 2012-07-14 02:50:10

0

您正在嘗試更新您的用戶界面(與tv.setText(s+"Works !");)在一個線程。你不能這樣做。您必須在主線程中更新您的用戶界面。只是刪除無用的主題:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sub); 
     TextView tv=(TextView)findViewById(R.id.rline1); 
     String s=(String)tv.getText(); 
     tv.setText(s+"Works !"); 
    } 

注意:(默認在Eclipse的DDMS透視圖)Eclipse不顯示錯誤,你必須打開你的logcat 接下來的時間,發表您的logcat的錯誤時你有麻煩。

0

替換下面的代碼

 Thread r = new Thread(new Runnable(){ 

        public void run() 
        { **final TextView tv=(TextView)findViewById(R.id.rline1); 
         String s=(String)tv.getText(); 
         tv.setText(s+"Works !");** 
        } 
    }); 
    r.start(); 

final TextView tv=(TextView)findViewById(R.id.rline1); 
          String s=(String)tv.getText(); 
          tv.setText(s+"Works !");