2011-08-10 6 views
0

私は3つのクラス、main、Sublist、editcrapを持っています。setText()を使用して更新した後にTextViewが消える

今のところ私は2つのテキストビューをSublist xmlファイルのButtonで区切っています。私のeditcrap xmlファイル内のEditTextとButtonを使用します。

私がしたかったのは、editcrapアクティビティのEditTextからテキスト入力を受け取り、ボタンをクリックしてそれをSublistアクティビティに戻し、Sublist xmlファイルの1番目のテキストビューに表示することでした。私はこれを、サブリストの活動からインテントとstartActivityForResult()を使用して行っています。

問題:

しかし、サブリストの活動にデータBAKを受信した後、 「subject1.setText(newText);」の後にコードが実行されます...エミュレータのSublistアクティビティに表示されるのは、ボタン(2つのTextViewの間にあるはずです)と右側のTextViewです。左のTextViewが消えます。エミュレータでもエラーでもない... TextViewだけが消える。私はこれを回避するために努力してきましたが、運はありません。誰かが私を見落としていると私に伝えることができましたか? :)

私のコード:

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) 
    { 
     case 1: if(resultCode==Activity.RESULT_OK) 
     { 
      String newText = data.getStringExtra("thetext"); 
      subject1.setText(newText); 
      // this is where the textview supposed to update but 
      // instead vanishes entirely 
     } 
    break; 
    } 
} 

//second activity's code: 

sub1 = (EditText) findViewById(R.id.peditText1);  
final String theText = sub1.getText().toString(); 
parambutton1 = (Button) findViewById(R.id.parambutton1); 

parambutton1.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(editcrap.this, Sublist.class); 

      i.putExtra("thetext", theText); 
      setResult(Activity.RESULT_OK, i); 
      finish(); 

     } 
    }); 
} 

これは、第二の活動はのEditTextから入力されたテキストを返す方法です。

+0

他のアクティビティnewTextから返されたデータが空の場合、TextViewは '消えてしまう'と思います。データを渡すためのコードを表示できますか? (うまくいけばsetResult(int resultCode、Intent data)の呼び出し) – antonyt

+0

余分なものがセットされていますか? 2番目のアクティビティで余分なデータがどのように格納されるかを表示できますか? – Ribose

+0

私は私の質問を編集し、2番目のアクティビティからのコードのputExtra部分を示しました:) – zanazaar

答えて

1

documentationには、常にパッケージ名の先頭に余分な名前を付けてください。

例:"com.example.thetext"

例結果セット:

data.putExtra("com.example.thetext", yourstring); 
setResult(Activity.RESULT_OK, data); 

例の結果を得る:私はgetString(R.string.extra_thetext)を行うことができますので、私は文字列リソースを使用し、余分なフィールド名をタイプミスを避けるために

String newText = data.getStringExtra("com.example.thetext"); 
subject1.setText(newText); 

を私のために "com.example.thetext"を格納するので、後でそれを誤って入力することはありません(コンパイル時には素晴らしい点がありますか?)。しかし、あなたは同様に定数を使用することができます。

static final String THE_TEXT = "com.example.thetext"; 
+0

これを試しましたが、 – zanazaar

+0

'i.putExtra(" thetext "、theText);' '(The breakpointを設定する)行の' theText'の値は何ですか? – Ribose

+0

theTextにはxmlプロパティの入力が含まれています。 OnClick()メソッドの前にEditText ...つまり、最終的なString theText = sub1.getText()。toString(); – zanazaar

-2

getStringExtraの別のオーバーロードを使用することができます。

data.getStringExtra("thetext","defaultText")を試してみてください。これにより、SOMETHINGが確実に表示されます。

また、わからない場合は、最初の引数はタグであり、実際のテキストではありません。 :)

これが役に立ちます。

+0

申し訳ありませんが、なぜこれが下降しましたか?これが間違っていると思われる場合は、自分の解決策を投稿してください。 – Codeman

+0

ブレークはcaseステートメント内で正しくあり、ifブロックや何かにはありません(編集されていない質問では、メソッドの終了 '}'を忘れてしまったように見えます)。コーダーが未処理のケースで何かを起こさせたい場合、 'default'が必要です。このアプリケーションが要求しなかったrequestCodeの 'onActivityResult'を取得する場合、良い応答は何もせずにドロップすることです。 'default:break'を実行すると、間違いなく見た目がいいかもしれませんが、このユーザーの質問には答えません。だからそこに。 :) – Ribose

+0

忍者は良い答えを編集します。また、より完全なので、私はあなたの答えをupvoted。 :) – Codeman

0

は、私は同様の問題を抱えていた、私のTextViewには、いくつかのループの後dissepearedと私はのsetText引数にNULL値を代入しようと、それはこの問題に

を引き起こすことに気づきました

TLDR;それらがヌルであるかどうかを確認してください。

関連する問題