2012-01-15 10 views
1

私はで構成され、テストアプリケーション書いています:最初のボタン「ランダム」(私はクラスと呼ばれているのEditTextボックスとのTextView 両方のランダムな名前を書き込み 2ボタン 1 EDITTEXT 1のTextViewこのAndroidプログラムの何が問題なのですか?

をランダムな名前を持つ文字列)

番目のボタン「印刷」を返すRandomNameは、私はそれを実行し、私はその理由を把握することはできませんときのTextView

プログラムがクラッシュへのEditTextであるwhatver書き込みます。 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; 
     } 
    } 

}

EDIT::次のように変更CODE:(それはもうクラッシュdoesntのが、ボタンに何もしないように、それは仕事をdoesntのすべてのヘルプは

ここでレイアウトイメージいただければ幸いです私は信じている)

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

; - あなたのボタン1とボタンです) – davogotland

+0

は、ちょうど上記のコメントに追加するには? OnClickClistenerをボタンに割り当てますか?あなたの質問と説明で詳しく説明してください。それだけで、ここの人々があなたを助けることができます。 – Abhijit

+0

問題を解決しました。クリックリスナーは実際には欠落していました。不完全な質問には申し訳ありません。ありがとう! – tyb

答えて

1

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); 
} 

にそれを試してみて、それがあなたの問題を修正かどうかを確認

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

変更この:問題は、次の行です。 contentviewを設定するまで、他のビューを参照することはできません。

はまた、それは

+0

私のコードを次のように編集しましたが、もうクラッシュしませんでしたが、ボタンは何もしません - "質問が編集されました****" – tyb

+0

あなたのボタンにonclickリスナーを設定していませんview.xml(あなたが投稿していない)にあります。詳細はこちらをご覧ください。 http://developer.android.com/reference/android/widget/Button.html – broschb

+0

はい、クリックリスナーは本当にありませんでした。皆さん、ありがとうございました。 – tyb

1

あなたは、あなたのクラスの本体ではないonCreate()方法であなたのEditTextTextViewを宣言する必要が質問をしたときにスタックトレースを投稿する場合に役立ちます。これは、onCreate()メソッドにあるsetContentView()が呼び出されていないとfindViewById()を呼び出せないためです。

+0

、宣言と割り当ては2つの別個のものです。 ** setContentViewの前に宣言することができます**、setContentViewが呼び出される前にfindViewByIdから値を代入することはできません**。 – davogotland

+0

ありがとう、質問の編集をお読みください。 – tyb

1

あなたのui要素をメンバーとして宣言することはできますが、宣言時には "id by view by id"メソッドで値を与えることはできません。これは、あなたが「コンテンツビューの設定」を呼び出した後でなければ存在しないからです。そう宣言で、実行します。

public EditText nomeEdt; 

というように、とのonCreateで、setContentViewにお電話した後は、操作を行います。あなたはonClickListenersを設定する必要があります:)

+0

ありがとう、質問の編集をお読みください。 – tyb

+0

@AngeloTiberiodeCarvalhoはレイアウトファイルmain.xmlも持っている必要があります – davogotland

1

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

などをあなたのためのボタン。見えるようになっているもののSCREENCAPよりもレイアウトXMLではるかに興味を持って

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

関連する問題