AlertDialog - Activity 与应用程序上下文
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,则可以使用应用程序上下文甚至 activity 上下文(两者),因为 toast 可以在您的应用程序中的任何位置显示,并且不附加到特定的 window。但是也有很多例外,一种例外是当你需要使用或传递 activity 上下文时。
Activity 上下文与 activity 相关联,如果 activity 被销毁,则上下文可以被销毁——单个应用程序可能有多个活动(很有可能) .有时您绝对需要 activity 上下文句柄。例如,如果您启动一个新的 activity,您需要在其 Intent 中使用 activity 上下文,以便新启动的 activity 连接到当前的 activity activity 堆栈。但是,您也可以使用应用程序的上下文来启动新的 activity,但随后您需要设置标志 Intent.FLAG_ACTIVITY_NEW_TASK 以将其视为新任务。
For more details
有人可以解释为什么我必须在 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,则可以使用应用程序上下文甚至 activity 上下文(两者),因为 toast 可以在您的应用程序中的任何位置显示,并且不附加到特定的 window。但是也有很多例外,一种例外是当你需要使用或传递 activity 上下文时。
Activity 上下文与 activity 相关联,如果 activity 被销毁,则上下文可以被销毁——单个应用程序可能有多个活动(很有可能) .有时您绝对需要 activity 上下文句柄。例如,如果您启动一个新的 activity,您需要在其 Intent 中使用 activity 上下文,以便新启动的 activity 连接到当前的 activity activity 堆栈。但是,您也可以使用应用程序的上下文来启动新的 activity,但随后您需要设置标志 Intent.FLAG_ACTIVITY_NEW_TASK 以将其视为新任务。
For more details