web-dev-qa-db-ja.com

レイアウトプレビューでのTextClockレンダリングの問題

レイアウトAndroidでTextClockウィジェットを作成すると、Studioのレイアウトプレビューが停止し、変更が表示されませんでした。しかし、デバッグでは、ウィジェットは完全に機能します。私がそれにコメントした場合、レイアウトのプレビュー作業は成功しました。別のPC Android Studioは正常に動作し、TextClockを表示します。

エラーレイアウトのプレビュー

Java.lang.NullPointerException
at Android.content.ContentResolver.registerContentObserver(ContentResolver.Java:2263)
at Android.widget.TextClock.registerObserver(TextClock.Java:626)
at Android.widget.TextClock.onAttachedToWindow(TextClock.Java:545)
at Android.view.View.dispatchAttachedToWindow(View.Java:19575)
at Android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.Java:3437)
at Android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.Java:3437)
at Android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.Java:3437)
at Android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.Java:3437)
at Android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.Java:3437)
at Android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.Java:3437)
at Android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.Java:3437)
at Android.view.AttachInfo_Accessor.setAttachInfo(AttachInfo_Accessor.Java:44)
at com.Android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.Java:355)
at com.Android.layoutlib.bridge.Bridge.createSession(Bridge.Java:404)
at com.Android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.Java:141)
at com.Android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.Java:657)
at com.Android.tools.idea.rendering.RenderTask.lambda$inflate$7(RenderTask.Java:788)
at Java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.Java:1590)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1149)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:624)
at Java.lang.Thread.run(Thread.Java:748)

TextClock XMLコード

<TextClock
            Android:layout_width="120dp"
            Android:layout_height="35dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            Android:layout_marginEnd="16dp"
            Android:format24Hour="dd.MMMyyyy, HH:mm"
            Android:format12Hour="dd.MMM.yyyy, hh:mm a"
            Android:textColor="#d0ffffff"
            Android:textSize="30sp" />

minSdkVersionを17に変更してレイアウトv17を作成しても、結果は得られませんでした。 Android Studio 3.6、3.6.1、4.0で問題が見つかりました

7
Typikal_Failman

私も同じ問題を抱えていました。私の回避策は、TextClockがTextViewを拡張するときに、右クリック->変換ビューを介してTextClockをTextViewに変換し、次にレイアウトをレンダリングし、レイアウトがレンダリングされた後、TextClockに変換し直しました。

これは醜い回避策です-修正ではありません(Android Studio)を閉じた後に繰り返す必要があります)-でも、少なくとも今はレイアウトを見ることができます。

Android Studioにバグとして報告し、うまくいけば彼らはそれを修正します

2
JuKe

修正/回避策は、TextClockのサブクラスを作成し、作成したサブクラスにこれを追加することです。

@Override
protected void onAttachedToWindow() {
    try {
        super.onAttachedToWindow();
    } catch(Exception e)  {
    }
}

ソース

1
tgi_rxlph