web-dev-qa-db-ja.com

AndroidXへの移行後のSingleLiveEventの問題

Android studio 3.2.1を使用してAndroidXに移行した後、このエラーのためにアプリを実行できません:

SingleLiveEvent.Java:29: error: name clash: observe(LifecycleOwner,Observer<T#1>) in SingleLiveEvent and observe(LifecycleOwner,Observer<? super T#2>) in LiveData have the same erasure, yet neither overrides the other
    public void observe(LifecycleOwner owner, final Observer<T> observer) {
                ^
  where T#1,T#2 are type-variables:
    T#1 extends Object declared in class SingleLiveEvent
    T#2 extends Object declared in class LiveData
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

私はそれをグーグルで検索し、他の解決策を見つけましたが、これをエレガントに解決するにはどうすればよいですか?単一のライブイベントを使用するすべての場所でアプリ全体をリファクタリングしたくありません。

12
vanste25

問題を見つけました。 LiveDataはこれを提供します:

public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer)

singleLiveEventは以下を提供します:

public void observe(LifecycleOwner owner, final Observer<T> observer)

解決策は、LiveDataと一致するようにSingleLiveEventのメソッドシグネチャを変更することです。

19
vanste25

Kotlinでこのソリューションを探していました:

override fun observe(@NonNull owner: LifecycleOwner, @NonNull observer:Observer<in T>)

0
the_lone_wolf