2016-08-11 7 views
2

は、ここに私のコードです:ウィンドウマネージャに添付されているプレゼンテーションのルートビューを取得する方法は?

Java.lang.IllegalArgumentException:View=com.android.internal.policy.impl.PhoneWindow$DecorView{164f32fc V.E..... R.....ID 0,0-0,0} not attached to window manager 
    at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:466) 
    at android.view.WindowManagerGlobal.updateViewLayout(WindowManagerGlobal.java:322) 
    at android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:91) 
    at com.evideostb.cbb.diveintotv.MyPresentation$override.init$body(MyPresentation.java:30) 
    at com.evideostb.cbb.diveintotv.MyPresentation$override.access$dispatch(MyPresentation.java) 
    at com.evideostb.cbb.diveintotv.MyPresentation.<init>(MyPresentation.java:0) 

は、だから私はどのように取得することができます:あなたが見ることができるように、私は怒鳴る例外が発生しましたmanager.But窓から私のプレゼンテーションののparamsを変更しようとしている

public MyPresentation(Context outerContext, Display display) { 
    super(outerContext, display); 

    WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 
    View rootView = getWindow().getDecorView().getRootView(); 

    WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    lp.x=300; 
    lp.y=300; 
    lp.width=lp.height=500; 
    wm.updateViewLayout(rootView, lp); 
} 

ウィンドウマネージャに添付するプレゼンテーションのルートビュー

答えて

1

例外名にはIllegalArgumentException, DecorView not attached to window managerと記載されています。
おそらくgetRootView()に電話すると、アクティビティ/フラグメントがonPause状態(アクティブなUIなし)になっている可能性があります。

ビュー上の任意のアクションを実行する前にこのコードを追加することができます。
活動

if (isFinishing()){ 
//You code here 
} 

断片

if (isAdded()){ 
//You code here 
} 

またhere多分あなたは一般的なバグに悩まさを見て。

0

@Nir Duanのお返事ありがとうございます。私の問題は、私の行動を間違った場所で実行することだと思います。

プレゼンテーションのコンストラクタでは、ルートビューはまだウィンドウマネージャに追加されていません。

プレゼンテーションが表示された後、wm.updateViewLayout(rootView, lp);が有効になります。

関連する問題