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

时间:2016-12-22 13:13:38

标签: android android-alertdialog applicationcontext

有人可以解释为什么我必须在我的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>

谢谢

1 个答案:

答案 0 :(得分:1)

有两种类型的上下文:

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

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

For more details