3 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個贊
這一行可能是罪魁禍?zhǔn)祝?/p>
Activity activity = (Activity) v.getContext();
的觀點(diǎn)v傳遞給onClick()方法是相同的觀點(diǎn),即你分配聽者,所以v是一樣的holder.parentLayot。我不知道確切holder.parentLayot來自哪里,但很有可能(在 XML 中)此視圖(或其父視圖之一)具有android:theme屬性。
當(dāng)視圖具有該android:theme屬性時,它不會直接使用其活動的上下文。相反,android 框架會將 Activity 的上下文“包裝”在 aContextThemeWrapper中以修改視圖的主題。
要從此包裝器訪問活動,您必須“解開”它。嘗試這樣的事情:
private static Activity unwrap(Context context) {
while (!(context instanceof Activity) && context instanceof ContextWrapper) {
context = ((ContextWrapper) context).getBaseContext();
}
return (Activity) context;
}
然后,您可以在您的onClick()而不是直接轉(zhuǎn)換上下文中使用此方法:
Activity activity = unwrap(v.getContext());

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個贊
Kotlin 中的遞歸解決方案:
fun Context.getActivity(): Activity? {
return when (this) {
is Activity -> this
is ContextWrapper -> this.baseContext.getActivity()
else -> null
}
}
檢查使用情況View.getContext()。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊
簡單地使用上下文就可以了
FragmentManager fragmentManager = ((AppCompatActivity) context).getSupportFragmentManager();
添加回答
舉報(bào)