作者:一直很哇塞. | 来源:互联网 | 2022-12-08 20:34
如何解决《android.view.ContextThemeWrapper无法强制转换为android.app.Activity》经验,为你挑选了1个好方法。
1> Ben P...:
这条线可能是罪魁祸首:
Activity activity = (Activity) v.getContext();
的观点v
传递给onClick()
方法是分配听者同样的观点,所以v
是一样的holder.parentLayot
.我不确切知道holder.parentLayot
从哪里来的,但是(在XML中)这个视图(或其父节点之一)具有android:theme
属性的机会非常好.
当视图具有该android:theme
属性时,它不直接使用其活动的上下文.相反,android框架将"包装"活动的上下文ContextThemeWrapper
,以便修改视图的主题.
要从此包装器访问活动,您必须"解包"它.尝试这样的事情:
private static Activity unwrap(Context context) {
while (!(context instanceof Activity) && context instanceof ContextWrapper) {
cOntext= ((ContextWrapper) context).getBaseContext();
}
return (Activity) context;
}
然后,您可以在您的方法中使用此方法,onClick()
而不是直接转换上下文:
Activity activity = unwrap(v.getContext());