0

2つのクラスがあります。ビューを設定する MainActivity と、MainActivity でビューを更新する ClassX です。ClassX は、関連する場合、MainActivity から呼び出される AsyncTask です。

私がやりたいことは、mainTextLog というビューのテキストを変更することです。グローバル TextView 変数を宣言し、onCreate() メソッドで findViewById() を使用してビューに設定しました。

private TextView logger;

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

    logger = (TextView) findViewById(R.id.mainTextLog);

}

今では、onCreate() からテキストを変更できるはずです。しかし、別のクラス (ClassX) から変更したいので、そのためのメソッドを作成する必要があります。

public void setLogText(String text) {
    logger.setText(text);
}

しかし、うまくいきません。ロガーと setLogText() メソッドを静的にしようとしましたが、それでも機能しません。アプリがクラッシュするだけです。

それはおそらくかなり簡単ですが、私はアイデアがありません。

4

3 に答える 3

1

私が取り組んでいるアプリでこれをたくさん行ってきました.AndroidタブレットのMDIタイプのアプリです。

あなたが求めていることをするために....

MainActivity には

public static void setText(String txt){
  ((TextView)findViewById(R.id.mainTextLog)).setText(txt);
}

次に、子(または呼び出し元のクラス)で次のように呼び出します...

MainActivity.setText("myTextToShow");

それだけです...私はAndroid APIレベル12を使用しています...私が正しいことを覚えていれば、APIレベル7でも機能しました。

お役に立てれば...

于 2012-05-20T22:24:53.157 に答える
1

AsyncTask を使用している場合は、onProgressUpdateまたはonPostExecuteで値を設定する必要があります。

AsyncTasksのドキュメントを読む必要があります

UI スレッドで実行されず、例外が発生するため、doInBackground メソッドから UI を更新することはできません

また、アプリケーションがクラッシュしたときに発生する例外を投稿して、問題が何であるかをよりよく理解できるようにする必要があります。しかし、間違ったスレッドからテキストを更新しようとしていると思います。

于 2012-05-20T22:24:30.293 に答える
0

1 つの可能性は次のとおりですsetLogText。別のクラス X を呼び出すとき。MainActivity はもう存在しない可能性があります。これにより、loggernull 参照になりますか?

于 2012-05-20T22:24:42.920 に答える