2017-11-13 7 views
0

TextViewを別の非アクティビティクラスから変更したいと思います。私は答えHow to update a TextView of an activity from another classadapostのポストでここに答えを参照しますが、私はどのように正しく "ClassB"にコンテキストを渡すか分からない。別のクラスにコンテキストを渡してアクティビティのTextViewを変更する

メインクラスでは、ClassB obj = new ClassB(this);ClassB obj = new ClassB(getApplicationContext());を試しました。しかし、たびにTextView txtView = (TextView)findViewById(R.id.text);はNullPointerExceptionを返します。

私はsetContentViewの後でそれを行うと確信しています。私はこのテキストビューをメインクラスから入手できます。

どのように動作させるためにコンテキストを渡すのですか?

+1

を 'ClassB'コンストラクタに渡します。 – CommonsWare

+0

getApplicationContext()の代わりにgetContext()を使用するとどうなりますか? – Ankit

+0

しかし、アクティビティ全体を別のクラスに渡す方法は何ですか?より多くのUI要素を変更したいのですが? –

答えて

0

他のクラスにそのアクティビティのオブジェクトを作成します。 コンストラクタ内のアクティビティを渡し、オブジェクトにアタッチします。このようにして、アクティビティのすべてのパブリック変数とメソッドは、他のクラスで取得されます。

class B { 
final MyActivity activity; 
public B(MyActivity activity) { 
this.activity = activity; 
} 
// here you can access all public field variables and methods of MyActivity. 
} 

アクティビティのアクティビティについては、「静的」以外で使用されるすべての変数を作成できます。

0

問題はIdリソースでした。 TextViewのIDが@+id/textに設定されていると、オブジェクトはNullPointerExceptionを返しました。 Id xmlリソースを作成したときに、<item type="id" name="tv_zero" />という項目が追加され、アクティビティxml android:id="@id/tv_zero"のアプリケーションが正常に機能しました。 私はメインでそれをClassB ObjOne = new ClassB(this);と呼び、ObjOne.Update();

関連する問題