2012-11-26 49 views
0

我試圖準備一個視圖,以便在我切換到該視圖之前更新textview中的文本。更改不同視圖中的textview

我已經聲明瞭TextView的變量爲public,初始化它在OnCreate

Info = (TextView) findViewById(R.id.BackDialogText); 

然後當談到時間來改變文字,我得到一個NullPointerException

Info.setText(TheString); 
setContentView(R.layout.mydialog_layout); 

我已經運行沒有setText的應用程序,它運行良好,顯示我的預覽文本我的看法。我錯過了更新視圖文本的一些技巧嗎?

+0

Textview'Info'是否屬於某個對話框?那麼你將需要使用'Info =(TextView)myDialog.findViewById(R.id.BackDialogText);' –

+0

它屬於mydialog_layout。 所以在這種情況下:'mydialog_layout.findViewById(R.id.BackDialogText)' – AtlasOnEarth

+1

好的。然後閱讀@Vipul Shah的回答。這是正確的。它會工作。使用setContentView(R.layout.mydialog_layout); Info =(TextView)findViewById(R.id.BackDialogText); Info.setText(TheString); –

回答

1

你設置視圖

setContentView(R.layout.mydialog_layout); 

你的活動,你可以不使用視圖中的元素在你的代碼基本上前。所以你必須在你的代碼中有這樣的東西

setContentView(R.layout.mydialog_layout); 
Info = (TextView) findViewById(R.id.BackDialogText); // you cannot initialize your view before setcontentview 
Info.setText(TheString); //this line must be always called after setContentView 
0

findViewById()在您從中調用它的視圖中找到視圖。

編輯:對不起,我的Mac崩潰了,我無法進一步擴展。基本上,在Android中,只有前景活動在任何一個點上生活。所以即使從另一個Activity修改一個View也不是一個好主意。如果它只是要修改的文本,那麼您有幾個選項,最簡單的方法是在其中一個活動中使用公共靜態變量,然後使用該變量調用setText。

因此,例如:

public class Activity1 extends Activity { 
    private static theString = ""; 

    public static void setString(String s) { 
     theString = s; 
    } 

    public void onCreate(Bundle b) { 
     super.onCreate(b); 
     setContentView(R.layout.mydialog_layout); 
    Info = (TextView) findViewById(R.id.BackDialogText); 



     Info.setText(TheString); 
    } 
} 

,然後在活性2,你可以撥打:

Activity1.setString("New String"); 
+0

所以我需要從我以後打電話的角度來找到它?例如'mydialog_layout.findViewById(R.id.BackDialogText)'? – AtlasOnEarth

1

只是互換線位置。

下面是工作片段。

setContentView(R.layout.mydialog_layout); 
Info.setText(TheString); 
+0

他說他想從另一個視圖修改一個視圖。 – ajacian81

+0

這仍然會在同一個setText行上導致相同的錯誤。 – AtlasOnEarth

+0

這是正確的,我只需要在更改視圖後定義TextView。所以代碼如下: 'setContentView(R.layout.mydialog_layout); Info =(TextView)findViewById(R.id.BackDialogText); Info.setText(TheString);' – AtlasOnEarth

相關問題