0

Activity の子クラスではないクラスから TextView を設定する際に問題があります。このクラスは、基本的に、サード パーティ サーバーでの登録と REST 要求の処理に使用されます。

サード パーティ サーバーからテキスト フィールド情報を取得した後、メイン アクティビティで TextView を設定するには遅すぎます。

  • MainActivity が既に開始されているため、SharedPreferences を使用してこの情報を設定することはできません。
  • 私の Java クラスはアクティビティ クラスではないため、Bundle でこの情報を渡すことはできません。

この情報を渡し、MainActivity で TextView を設定するにはどうすればよいですか? これを行う方法はありますか?

4

3 に答える 3

2

これを行う適切な方法は、リスナーを作成することです。

インターフェイスを作成します。

public interface OperationCompletedListener{
void onOperationCompleted(String resultValue);
}

次に、Rest サービスを呼び出すクラスで、このリスナーの変数とそれを設定するメソッドを作成します。

private OperationCompletedListener mListener;

public void setOperationCompletedListener(OperationCompletedListener listener){
mListener=listener;
}

次に、残りのサービスが次のような呼び出しを完了したとき:

if(mListener!=null){
mListener.onOperationCompleted("your value to be passed");
}

次に、TextView を含むアクティビティ クラスで、OperationCompletedListener のオブジェクトを作成し、前に作成した set メソッドを使用して他のクラスに設定します。次に、onOperationCompleted メソッドで、テキスト ビューに値を設定して完了です。

private OperationCompletedListener mOperationCompletedListener=new OperationCompletedListener() {

    @Override
    public void onOperationCompleted(String resultValue) {
        yourTextView.setText(resultValue);
    }
};

restServiceClassObject.setOperationCompletedListener(mOperationCompletedListener);
于 2012-11-21T08:08:42.617 に答える
0

インスタンス化するときActivityに、を非に渡すようにしてください。Activity class例えば:

public class NonActivityClass {
    private Activity parentActivity;
    public NonActivity(Activity parentActivity) {
        this.parentActivity = parentActivity;
    }
}

または、インスタンス化したくない場合はActivity、を静的メソッドに渡すことができます(それはです)。次に、をインフレートするか、親から a を実行して、テキストを設定できます。NonActivityClassabstractTextViewfindViewById

私の経験から、静的な非最終変数を使用して、アクティビティ間の参照を維持することは絶対にしないでください。アプリまたは電話を再起動するか、Android がアプリのプロセスを強制終了すると、変数の参照と状態が失われ、アプリがクラッシュする可能性があります。

于 2012-11-21T08:15:21.000 に答える