9

次の問題があります。次のように、別のスレッドでマップビューにルートを描画しています。

 public void drawRoute(final MapView mapView) { 
          new Thread(new Runnable() {
          public void run() {
          try {
           //Do something useful
          } catch (SomeException se) {
           Handler handler = mapView.getHandler();
           handler.post(/*show error in UI thread*/)
          }}
        }).start();
      }

しかし、ハンドラーを取得するとnullが返されますが、デバッグモードではハンドラーが返され、エラーメッセージが表示されます。問題は何ですか?

PS Handler を取得する方法が間違っている可能性がありますが、それに関する情報は見つかりませんでした。

4

1 に答える 1

28

ビューがアタッチされていないため、getHandlerメソッドは次のように戻ります。null

public Handler getHandler() {
    if (mAttachInfo != null) {
        return mAttachInfo.mHandler;
    }
    return null;
}

mAttachInfoで設定されdispatchAttachedToWindow、 で無効になりdispatchDetachedFromWindowます。

代わりにmapView.getHandler().post()直接使用できます( ormapView.post()を使用しているようです)。getHandler().post()ViewRootImpl.getRunQueue().post()

于 2013-09-19T08:55:00.113 に答える