Status Update
Comments
jg...@google.com <jg...@google.com> #2
Do you have a sample project that reproduces this issue that you can attach / link here?
pr...@gmail.com <pr...@gmail.com> #3
I can't upload it publicly, but I can share it privately. Where should I send it to?
jg...@google.com <jg...@google.com> #4
Is it possible to address this compatibility issue?
It is important to make the androidx.lifecycle library version 2.8 compatible with AGP 7. We share our library as a dependency, and some of our clients may use AGP 7. In the scope of this issue, it blocks project improvements.
Thank you.
pr...@gmail.com <pr...@gmail.com> #5
Ideally, an isolated sample project would be the best option. If that's really not possible, you can upload the sample as a zip
file using "Restrict this comment/attachment". The option is located in the comment section, and it is the last icon button (an eye with a lock).
Thank you, that's very insightful. I was unable to find any change on the Lifecycle libraries that could break compatibility with AGP7. We'll need to reach out to the AGP team to check if they have any insight that could help us understand the issue.
[Deleted User] <[Deleted User]> #6
whenever i upgrade from 2.7.0 to 2.8.0 or 2.8.2, this exception crashes the app on launch
this happens in debug mode too, when minify is disabled and no classes are removed by proguard, i tried these in 2 different projects
This is the on create of my application class
public class MyApplication extends MultiDexApplication implements Application.ActivityLifecycleCallbacks, DefaultLifecycleObserver{
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this); // ActivityLifecycleCallbacks registered here
ProcessLifecycleOwner.get().getLifecycle().addObserver(this); // DefaultLifecycleObserver as observer
}
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
DefaultLifecycleObserver.super.onDestroy(owner);
}
... other functions are also overridden from listeners
}
FATAL EXCEPTION: main
Process: com.mycompany.mypackage, PID: 17498
java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at android.app.ActivityThread.installProvider(ActivityThread.java:7816)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7328)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7046)
at android.app.ActivityThread.access$1600(ActivityThread.java:271)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2125)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8250)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
Caused by: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2421)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2386)
at android.app.ActivityThread.installProvider(ActivityThread.java:7811)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7328)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7046)
at android.app.ActivityThread.access$1600(ActivityThread.java:271)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2125)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8250)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:37)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:25)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2421)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2386)
at android.app.ActivityThread.installProvider(ActivityThread.java:7811)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7328)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7046)
at android.app.ActivityThread.access$1600(ActivityThread.java:271)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2125)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8250)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.ReportFragment$ActivityInitializationListener" on path: DexPathList[[zip file "/data/app/~~EwExlkboDf8bk3j1eosDWA==/com.mycompany.mypackage-c51A6mYy3awOqUgzqc2fgA==/base.apk"],nativeLibraryDirectories=[/data/app/~~EwExlkboDf8bk3j1eosDWA==/com.mycompany.mypackage-c51A6mYy3awOqUgzqc2fgA==/lib/arm64, /data/app/~~EwExlkboDf8bk3j1eosDWA==/com.mycompany.mypackage-c51A6mYy3awOqUgzqc2fgA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:37)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:25)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2421)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2386)
at android.app.ActivityThread.installProvider(ActivityThread.java:7811)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7328)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7046)
at android.app.ActivityThread.access$1600(ActivityThread.java:271)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2125)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8250)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
lb...@gmail.com <lb...@gmail.com> #8
The issue occured in a project using Android Gradle Plugin 8.2.2. I was able to fix it by updating to AGP 8.5.1. It may have been enough to use 8.3.x but I didn't' test that.
gp...@google.com <gp...@google.com> #9
na...@hl.co.uk <na...@hl.co.uk> #11
ba...@gmail.com <ba...@gmail.com> #12
ta...@gmail.com <ta...@gmail.com> #13
vi...@gmail.com <vi...@gmail.com> #14
implementation "com.urbanairship.android:urbanairship-fcm:$urbanairship_version"
implementation "com.urbanairship.android:urbanairship-message-center:$urbanairship_version" // Message Center
implementation "com.urbanairship.android:urbanairship-automation:$urbanairship_version"
java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at android.app.ActivityThread.installProvider(ActivityThread.java:8034)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Caused by: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2649)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2612)
at android.app.ActivityThread.installProvider(ActivityThread.java:8029)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:37)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:25)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2649)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2612)
at android.app.ActivityThread.installProvider(ActivityThread.java:8029)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.ReportFragment$ActivityInitializationListener" on path: DexPathList[[zip file "/data/app/~~t4tgpMBpEUo9gHWGNuGZcQ==/com.tracfone.net10.myaccount-jtV7YGp0gojIBUPmOA2nsA==/base.apk"],nativeLibraryDirectories=[/data/app/~~t4tgpMBpEUo9gHWGNuGZcQ==/com.tracfone.net10.myaccount-jtV7YGp0gojIBUPmOA2nsA==/lib/arm64, /data/app/~~t4tgpMBpEUo9gHWGNuGZcQ==/com.tracfone.net10.myaccount-jtV7YGp0gojIBUPmOA2nsA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:37)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:25)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2649)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2612)
at android.app.ActivityThread.installProvider(ActivityThread.java:8029)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
10:46:28.738 E FATAL EXCEPTION: main
Process: com.tracfone.net10.myaccount, PID: 9383
java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at android.app.ActivityThread.installProvider(ActivityThread.java:8034)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Caused by: androidx.startup.StartupException: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2649)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2612)
at android.app.ActivityThread.installProvider(ActivityThread.java:8029)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Caused by: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:173)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2649)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2612)
at android.app.ActivityThread.installProvider(ActivityThread.java:8029)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:37)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:25)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:173)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2649)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2612)
at android.app.ActivityThread.installProvider(ActivityThread.java:8029)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.ReportFragment$ActivityInitializationListener" on path: DexPathList[[zip file "/data/app/~~t4tgpMBpEUo9gHWGNuGZcQ==/com.tracfone.net10.myaccount-jtV7YGp0gojIBUPmOA2nsA==/base.apk"],nativeLibraryDirectories=[/data/app/~~t4tgpMBpEUo9gHWGNuGZcQ==/com.tracfone.net10.myaccount-jtV7YGp0gojIBUPmOA2nsA==/lib/arm64, /data/app/~~t4tgpMBpEUo9gHWGNuGZcQ==/com.tracfone.net10.myaccount-jtV7YGp0gojIBUPmOA2nsA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:37)
at androidx.lifecycle.ProcessLifecycleInitializer.create(ProcessLifecycleInitializer.kt:25)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:173)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2649)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2612)
at android.app.ActivityThread.installProvider(ActivityThread.java:8029)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7193)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2360)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8448)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
ma...@gmail.com <ma...@gmail.com> #15
me...@gmail.com <me...@gmail.com> #16
fe...@gmail.com <fe...@gmail.com> #17
pr...@swiggy.in <pr...@swiggy.in> #18
To get the view we can use the recyclerView which is always the first child of the viewPager
I have created binding adapter but this can be modified as per need
@BindingAdapter("autoAdjustHeight")
fun autoAdjustHeight(viewPager2: ViewPager2, autoAdjustHeight: Boolean) {
val weakRef = WeakReference(viewPager2)
// Need to measure the height of first item again
// Otherwise the viewpager will set the height to the max of whatever is in cache
setInitialHeight(weakRef)
// To get the maximum height from the cache
// If this cache is not set then the height calculation breaks
viewPager2.offscreenPageLimit = 1
val pageChangeCallback = object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
try {
weakRef.get()?.let {
updateHeight(it, position)
}
} catch (_: Exception) {
}
}
}
// Observer required to update the height of first item whenever the dataset changes
val adapterObserver = object : RecyclerView.AdapterDataObserver() {
override fun onChanged() {
super.onChanged()
setInitialHeight(weakRef)
}
}
if (autoAdjustHeight) {
viewPager2.registerOnPageChangeCallback(pageChangeCallback)
(viewPager2.getChildAt(0) as? RecyclerView)?.adapter?.registerAdapterDataObserver(adapterObserver)
} else {
viewPager2.unregisterOnPageChangeCallback(pageChangeCallback)
(viewPager2.getChildAt(0) as? RecyclerView)?.adapter?.unregisterAdapterDataObserver(adapterObserver)
}
}
private fun setInitialHeight(viewPager2: WeakReference<ViewPager2>) {
viewPager2.get()?.let {
updateHeight(viewPager2 = it, position = 0)
}
}
private fun updateHeight(viewPager2: ViewPager2, position: Int) {
val view =
(viewPager2.getChildAt(0) as? RecyclerView)?.findViewHolderForAdapterPosition(position)?.itemView
?: return
val wMeasureSpec =
View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.EXACTLY)
val hMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
view.measure(wMeasureSpec, hMeasureSpec)
val height = view.measuredHeight
if (viewPager2.layoutParams.height != height) {
viewPager2.layoutParams.height = height
viewPager2.requestLayout()
}
}
}
tr...@gmail.com <tr...@gmail.com> #19
Your solution save me lol. Thank you so much.
Description
Let's say ViewPager2 has two items: View1 and View2
View1 = 200dp height
View2 = 300dp height
When the ViewPager2 loads, it has wrapped content for View1 properly and is 200 dp.
When you swipe over to View2, though, the ViewPager2's height is still 200dp and so the last 100dp of View2 are cut off.