gpt4 book ai didi

android - 自定义适配器的上下文参数 - getApplicationContext() 失败但 'this' 有效

转载 作者:行者123 更新时间:2023-11-29 17:46:52 25 4
gpt4 key购买 nike

我有简单的代码 fragment 来实现自定义 ListView 。

在这段代码中,我有 CustomAdapter 类,它扩展了 ArrayAdapter:

 CustomAdapter adapter = new CustomerAdapter(getApplicationContext(),R.layout.listview_item_row, weather_data);

CustomAdapter 的构造函数如下:

 public CustomerAdapter(Context context, int layoutResourceId, weather[] data) {
super(context, layoutResourceId, data);
mlayoutResourceId = layoutResourceId;
mcontext = context;
mdata = data;
}

如果我这样写,logcat 会显示以下错误:

Java.lang.ClassCastException: android.app.Application context can not be cast to android.app.Activity

所以我将 getApplicationContext() 更改为 this。它运行良好:

 CustomAdapter adapter = new CustomerAdapter(this,R.layout.listview_item_row, weather_data);

那么,我的问题是:1. 为什么我们不能在这里传递应用程序上下文? (对于定制适配器)。和

2.在哪些情况下我们必须传递 Activity 上下文而不是 Application 上下文?

[注:我已经看了一些答案herehere ,但他们不关心这里的具体问题。所有人都在说“你可以使用它们中的任何一个”,但在这样的特定情况下,它不起作用。所以,请不要标记为重复。]

最佳答案

您应该在创建适配器对象时传递 Activity 的上下文。应用上下文不同于 Activity 上下文,它们永远不应该互换。使用应用程序上下文可为您提供应用程序的整个上下文,这取决于您如何设置应用程序子类。虽然它仍然可以编译,但它可能会产生您不期望的结果。崩溃的原因是因为您的 Application 子类中有什么,并且可能特定于您的情况。

简单地说,适配器对象应该使用本地 Activity 上下文,因为这是它绑定(bind)到的上下文。

关于android - 自定义适配器的上下文参数 - getApplicationContext() 失败但 'this' 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25923400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com