1

私はこのコードを持っています...

class IncomingHandler extends Handler
{
    @Override
    public void handleMessage(Message message) 
    {

        String totalReceived = (String) message.obj;
        Log.i("TAG", "total received: " + totalReceived);
        totalTextView.setText("" + totalReceived);

        Log.i("TAG", (Looper.getMainLooper().getThread() == Thread.currentThread()) ? "UI thread" : "NOT UI thread");
        //Toast.makeText(MainActivity.this, "message received.", Toast.LENGTH_LONG).show();

    };
};

アプリを実行すると問題なく動作しますが、デバイスの向きを変更するなどしてアクティビティを再作成すると、テキストは更新されません。私はメッセージを受け取り、LogCat によって正常に印刷されることに注意してください。

また、前回のログでは、メイン スレッドで実行しているかどうかを判断しようとしていることにも注意してください。そのチェックが正しい場合、私は確かに UI スレッドで実行されています...

私が間違っているかもしれないことについてのアイデアはありますか?

乾杯、アレックス

4

3 に答える 3

1

あなたの問題はtotalTextView、(現在は破棄された) 前のアクティビティの TextView をまだ指していることです。

class IncomingHandlerがアクティビティのサブクラスである場合、更新中onCreate()に確実に更新するのは簡単な作業です。totalTextView = (TextView)findViewById(R.id.__/* something */__);

ハンドラーがアクティビティのサブクラスではない場合は、おそらくそうである必要があります。または、Android-Framework-High-Level のものをさらに調べて、アクティビティを更新してコールバックする必要があります (ローダーや UI のないフラグメントなど)。setRetainInstance(true);)

configChangedps .: 一部のユーザーは、マニフェストを挿入してアクティビティの破棄をオーバーライドするように指示する場合があります。最初のうちはうまくいくかもしれませんが、これは手っ取り早い修正方法であり、通常は将来大きな問題につながる、お勧めできないパターンです。

から: http://developer.android.com/guide/topics/manifest/activity-element.html#config

注: この属性の使用は避け、最後の手段としてのみ使用してください。構成の変更による再起動を適切に処理する方法の詳細については、ランタイムの変更の処理を参照してください。

于 2013-02-27T17:04:54.823 に答える
0

インスタンスを保存してみてくださいこれを追加してください

@Override
protected void onSaveInstanceState(Bundle outState) {
State s = new State(yourTextView.getText().toString());
outState.putSerializable(State.STATE, s);
super.onSaveInstanceState(outState);
 }
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
State s = (State) savedInstanceState.getSerializable(State.STATE);
yourTextView.setText(s.getYourTextViewText());
 }
于 2013-02-27T16:42:13.873 に答える
0

リントはハンドラーを静的にする必要があることを示唆しているため、ハンドラーをスタティックにしてアクティビティを作成しweakReference、アクティビティ参照を介してテキストビューにアクセスします。

于 2013-02-27T16:39:59.403 に答える