繁体   English   中英

AlertDialog-活动与应用程序上下文

[英]AlertDialog - Activity vs Application Context

有人可以解释一下为什么我必须在AlertDialog.Builder参数VS getApplicationContext()中使用Activity的上下文吗? 具体来说,为什么会出现此错误:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

我了解两者之间的区别,但想知道为什么它特别提到使用Theme.AppCompat

我知道这与AppCompatActivity有关,并且主题不再兼容,但是找不到为什么的可靠解释?

我的应用程序的主题在样式XML文件中设置为此:

    <style name="AppTheme" parent="Theme.AppCompat">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

谢谢

有两种类型的上下文:

应用程序上下文与应用程序相关联,并且在应用程序的整个生命周期中始终是相同的-不会改变。 因此,如果您正在使用Toast,则可以使用应用程序上下文,甚至可以使用活动上下文(两者),因为Toast可以在应用程序中的任何位置显示,并且不附加到特定窗口。 但是有很多例外,一种例外是当您需要使用或传递活动上下文时。

活动上下文与活动相关联,如果活动被销毁,则活动上下文可以被销毁-单个应用程序可能有多个活动(可能性更大)。 有时您绝对需要活动上下文句柄。 例如,如果您启动一个新活动,则需要在其Intent中使用活动上下文,以便就活动堆栈而言,新的启动活动连接到当前活动。 但是,您也可以使用应用程序的上下文来启动新活动,但随后需要设置标志Intent.FLAG_ACTIVITY_NEW_TASK以将其视为新任务。

更多细节

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM