0

我想做一個簡單的文字遊戲,但我甚至不能通過第一步。 佈局中有一個textview和3個單選按鈕。 我想在單擊其中一個單選按鈕時更改文本,並確定應用程序要使用的文本,我有一個位置int。 示例:我選擇按鈕一:如果position = 1,則將設置的文本設置爲文本2.如果position = 9,則將text設置爲11等等。 這裏是代碼:setText在checkedchanged上?

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Window; 
import android.widget.RadioGroup; 
import android.widget.RadioGroup.OnCheckedChangeListener; 
import android.widget.TextView; 


public class Game extends Activity implements OnCheckedChangeListener{ 
    public int position; 
    TextView text; 
    RadioGroup rggr; 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     position = 1; 
     text = (TextView) findViewById(R.id.text); 

     setContentView(R.layout.p1); 

     rggr = (RadioGroup) findViewById(R.id.rgGr); 
     rggr.setOnCheckedChangeListener(this); 
    } 

    public void onCheckedChanged(RadioGroup group, int checkedId) { 
     // TODO Auto-generated method stub 
     switch (checkedId){ 
       case R.id.rb1: 
        if(position == 1){ 
         text.setText("this is text 1"); 
         position = 2; 

        } 
       } 
      } 
     } 

如果我更改線路 「text.setText(」 這是文1 「);」到別的東西。例如setcontentview,那麼它一切正常。但是當我想改變文本時,它會在我選擇單選按鈕時崩潰。

+0

崩潰的logcat會有幫助 –

+1

你可以切換'text =(TextView)findViewById(..)'和'setContentView(...)'的順序嗎? –

+0

同意@DavidM - 你不能調用' findViewById(...)'在你設置你的內容視圖之前 - 它會簡單地爲你的'TextView'返回'null'。 – Squonk

回答

2

看起來您正在嘗試在爲此活動設置UI之前獲取對TextView的引用。而不是

text = (TextView) findViewById(R.id.text); 
    setContentView(R.layout.p1); 

嘗試

setContentView(R.layout.p1); 
    text = (TextView) findViewById(R.id.text); 
0

如果您嘗試設置的內容視圖之前得到一個觀點,這將是空的,所以在這個示例文本爲null,因爲你把它設置內容之前視圖。你可以用調試器來驗證。正如David M還表示,在調用findViewById的setContentView後就能解決問題

對於未來的

因此,當您嘗試通過text.setText(...)來訪問它,它會與NullPointerException異常

崩潰正如David M所評論的那樣,LogCat輸出將會很有幫助。

0

感謝您的所有。 這是錯誤的順序

setContentView(R.layout.p1); 
text = (TextView) findViewById(R.id.text); 

謝謝。