2012-01-15 81 views
1

我寫一個測試應用程序,其中包括: 2個按鈕 1 EDITTEXT 1的TextView這個Android程序有什麼問題?

的第一個按鈕「隨機」無論是在的EditText框和TextView的 寫入隨機名稱(我稱爲類RandomName它返回一個隨機名稱的字符串)

第二個按鈕「打印」寫道whatver是在進入的EditText TextView的

程序崩潰,當我運行它,我無法找出原因。任何幫助將

佈局的形象在這裏加讚賞:http://img824.imageshack.us/img824/3046/rndname.jpg

public class RandomNameTesteActivity extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 


public EditText nomeEdt = (EditText)findViewById(R.id.editText1); 
public String nomeStr = nomeEdt.toString(); 
public TextView nomeTest = (TextView) findViewById(R.id.textView1); 



public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch(v.getId()) 
     { 
     case R.id.button1: 
     //Put random name in EditText box and in TextView 
      RandomName RndName = new RandomName(); 
      String rndNameStr = RndName.getName(); 
      nomeTest.setText(rndNameStr); 


     break; 
     case R.id.button2: 
     //Print whatever is in EditText box to TextView  
     nomeTest.setText(nomeStr); 
     break; 
     } 
    } 

}

編輯:改變的代碼爲以下內容:(它不崩潰了,但它不工作,如按鈕無可奈何)

public class RandomNameTesteActivity extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 
EditText nomeEdt; 
TextView nomeTest; 
String nomeStr; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    nomeEdt = (EditText)findViewById(R.id.editText1); 
    nomeStr = nomeEdt.toString(); 
    nomeTest = (TextView) findViewById(R.id.textView1); 
} 






public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch(v.getId()) 
     { 
     case R.id.button1: 
     //Put random name in EditText box and in TextView 
      RandomName RndName = new RandomName(); 
      String rndNameStr = RndName.getName(); 
      nomeTest.setText(rndNameStr); 


     break; 
     case R.id.button2: 
     //Print whatever is in EditText box to TextView  
     nomeTest.setText(nomeStr); 
     break; 
     } 
    } 

}

+0

更感興趣的佈局XML比什麼它應該看起來像一個擷取畫面;) – davogotland 2012-01-15 21:32:53

+0

只是添加到上述評論 - 哪裏是你的按鈕1和按鈕2?你將OnClickClistener分配給按鈕嗎?請詳細說明您的問題和描述。只有這樣,這裏的人才能夠幫助你。 – Abhijit 2012-01-15 22:15:21

+0

問題解決了,點擊聽衆確實缺失。對於這個問題不完整,我感到抱歉。謝謝! – tyb 2012-01-16 15:19:59

回答

1

我相信問題是與以下幾行:

public EditText nomeEdt = (EditText)findViewById(R.id.editText1); 
public String nomeStr = nomeEdt.toString(); 
public TextView nomeTest = (TextView) findViewById(R.id.textView1); 

更改爲

public EditText nomeEdt; 
public TextView nomeTest; 

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
nomeEdt = (EditText)findViewById(R.id.editText1); 
nomeStr = nomeEdt.toString(); 
nomeTest = (TextView) findViewById(R.id.textView1); 
} 

試一下,看看是否能解決您的問題。在設置contentview之前,您無法查看其他視圖。

此外,它幫助,如果你問一個問題

+0

我編輯了我的代碼以下,它不再崩潰,但它不工作 - 按鈕什麼都不做: 「Question edited ****」 – tyb 2012-01-15 21:56:11

+0

您沒有爲您的按鈕設置onclick監聽器,除非您這樣做在你的view.xml中(你沒有發佈)。在這裏尋找更多的信息。 http://developer.android.com/reference/android/widget/Button.html – broschb 2012-01-15 22:14:45

+0

是的,Click Listeners確實缺失。謝謝你們。 – tyb 2012-01-16 15:17:49

1

你必須聲明你EditTextTextViewonCreate()方法不是在你的類的身體的時候發佈的堆棧跟蹤。那是因爲如果你沒有調用setContentView()這是你的onCreate()方法,你不能調用findViewById()。

+0

在語義上,聲明和賦值是兩個獨立的東西。它們**可以在setContentView之前聲明,它們不能在調用setContentView之前從findViewById中分配一個值。 – davogotland 2012-01-15 21:44:35

+0

謝謝,請閱讀問題中的編輯。 – tyb 2012-01-15 21:59:12

1

你可以將你的UI元素聲明爲成員,但是你不能在聲明中給它們賦予「按ID查找視圖」 - 方法的值。這是因爲在你調用「設置內容視圖」之前它們不存在。因此在聲明中,執行:

public EditText nomeEdt; 

等,並在的onCreate,你調用的setContentView,後做:

nomeEdt = (EditText)findViewById(R.id.editText1); 

等等:)

+0

謝謝,請閱讀問題中的編輯。 – tyb 2012-01-15 21:59:06

+0

@AngeloTiberiodeCarvalho也必須具有佈局文件main.xml – davogotland 2012-01-15 22:21:46

1

您需要設置onClickListeners爲你按鈕。

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 


nomeEdt = (EditText)findViewById(R.id.editText1); 
nomeStr = nomeEdt.toString(); 
nomeTest = (TextView) findViewById(R.id.textView1); 
findViewById(R.id.button1).setOnClickListener(this); 
findViewById(R.id.button2).setOnClickListener(this); 
} 
+0

是的,點擊監聽器確實丟失了。謝謝你們。 – tyb 2012-01-16 15:17:22