2012-04-18 16 views
0

アクティビティのないクラスからTextViewに値を設定するにはどうすればよいですか?私たちは不定の時間に値を取得するので、そのクラスから値を設定することが重要です。アクティビティのないクラスからTextViewに値を設定するにはどうすればよいですか?

すべてのアドバイスが役に立ちます。ありがとうございました。

P.S:

例えば、Actvityに私がのTextViewに値を設定する方法を有します。

public void textViewSetText (String value){ 
    tv.setText(value);  
} //how correctly to transfer value from my class to get the desired effect? 

答えて

0

アクティビティを保持していないと、アクティビティでTextViewが利用できるため、アクティビティを保持できない場合は不可能です。だからあなたは活動への参照を持っていないときは、それも内容を変更することはできません。あなたのアクティビティ参照を静的メソッドに渡す場合、そのメソッドがその変更を行うことが可能です。

+0

たとえば、Actvityには、値がTextViewに設定されるメソッドがあります。 public void tvTwoThreadTimeSetText(文字列値){ \t \tテレビ。setText(value); //希望の効果を得るためにクラスから値を正しく転送する方法 – Sinigami

+0

nop、アクティビティ参照を使わずにこの値を転送することはできません。しかし、BroadcastReceiverを採用している場合は、アプリケーションのコンテキストを使用してこれを行うことができます(アクティビティは必要ありません) – waqaslam

0

通常、TextViewの内容はアクティビティ内でのみ設定する必要があります。アクティビティの外でその値を設定することはできますが、それはあまり有用ではありません。

あなたの質問は、不定の時間に値を得ました。いくつかの選択肢があります。たとえば、そのクラスにコールバックを登録し、他のクラスがその値を取得した場合は、そのコールバック。しかし、スレッドの問題に注意してください.TextViewに値を設定するのはUI操作です。これはUIスレッドでのみ行う必要があります。

0
  1. UIスレッド
  2. AsyncTask外部からAndroidのUIツールキットにはアクセスしないでください、あなたのユーザーインターフェース上で、非同期の作業を実行することができます。ワーカースレッドでブロッキング操作を実行した後、スレッドやハンドラーを自分で処理することなく、結果をUIスレッドにパブリッシュします。ここで

例です:あなたは、あなたの場合は、より詳細な与えていない場合

public void onClick(View v) { 
     new SomeTask().execute(something); 
    } 
    private class SomeTask extends AsyncTask<Something, Void, String> { 
     /** The system calls this to perform work in a worker thread and 
      * delivers it the parameters given to AsyncTask.execute() */ 
     protected Bitmap doInBackground(Something something) { 
      return string; // the TextView's text 
     } 

     /** The system calls this to perform work in the UI thread and delivers 
      * the result from doInBackground() */ 
     protected void onPostExecute(String result) { 
      textView.setText(result); 
     } 
    } 

しかし、何も正確な答えはあなたを満足しないことがあります。

0

外部静的クラスを使用して、変更する文字列の値を保存し(TextView_Classに戻ったら値を設定)、静的クラスにアクセスして値を取得することができます。

「この」(アクティビティ)を静的クラスに保存し、そのアクティビティにすべての場所からアクセスして、TextViewを変更することもできます。 (私はこれが推奨されるとは思わない)。

場合によっては(あなたは十分に説明できませんでした)、通常は、親子クラスの場合は文字列をバンドルすることです。

0

私は、これはそれが

((MainActivity) activity).textViewSetText(); 

public void textViewSetText (String value){ 

    tv.setText(value);  
} 

が、あなたの活動MainActivityを拡張する必要が動作しますことも同様にしてみてください あなたの質問についてよく分からないけど。

関連する問題