[英]Android: Java Timer instantiated in each “onCreate” method
[英]Android: are adapters only declared/instantiated in onCreate()?
我可以将其归结为两个问题:
顾名思义, onCreate()
是创建适配器的唯一位置吗?
我正在按照本指南创建Gridview
,除了要从Spotify API中提取播放列表。 事实是,在onCreate()
创建适配器时,手边没有播放列表,这意味着在创建GridViewAdapter
时,我传递的是null。 有任何设计建议吗?
感谢您的反馈和宝贵的时间。
我想由于下面的示例,您正在混合两件事-创建适配器和设置数据。 该示例使用了一个ArrayAdapter
,它需要AFAIK构造函数中的数据。
适配器实际上没有标准,但是我通常这样做:
public class GridViewAdapter extends BaseAdapter {
private final Context context;
private List<DataClass> data = new ArrayList<>();
public GridAdapter(Context context) {
this.context = context;
}
public void setData(List<DataClass> data) {
this.data = data;
notifyDataSetChanged();
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int i) {
return data.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
// usual thing here
}
}
这里有几件事要注意。 基本上, DataClass
是您的数据类,应该包含填充项目所需的所有信息。 您应该偏爱List
而不是ArrayList
,因为示例更加通用,因为它更通用并且允许您更改适配器实现而无需更改其协定。 您还应该指定列表保存的类型,而不是像示例中那样不告诉编译器有关数组保存的对象的类型。
现在到好部分,并实际回答您的问题。 您可以随时创建适配器。 我正在传递上下文,但是您甚至可能不需要它。 通常, onCreate
是创建它的好地方,但是您可以随时进行。
收到数据后,只需调用adapter.setData(...)
,它将填充适配器的数据并通知其数据已更改。
你甚至可以分离这些最后的2种方法- setData
和notifyDataSetChanged
-并有一组数据只设置数据并调用notifyDataSetChanged()
只要你想。
希望这可以帮助
编辑
无论如何,我并不是要说您要遵循的示例很糟糕。 仍然是一个有效的示例,需要时ArrayAdapters
可以完成工作。 我只是认为您的问题非常有效,并且您尚未看到全局,因为该示例非常具体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.