我可以把它归结为两个问题:
正如标题所示,onCreate()
是唯一创建适配器的地方吗?
我正在关注this指南创建Gridview
,除非我从Spotify API中提取以获取播放列表列表。问题是,当在onCreate()
中创建适配器时,我手边没有播放列表,这意味着我在创建GridViewAdapter
时传入null。有任何设计建议吗?
感谢您的反馈和时间。
答案 0 :(得分:0)
我认为你正在混合两件事,因为你正在关注的例子 - 创建适配器和设置数据。该示例使用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(...)
,它就会填充适配器的数据,并通知数据已更改。
您甚至可以将最后两种方法分开 - setData
和notifyDataSetChanged
- 并让设置数据仅设置数据并随时调用notifyDataSetChanged()
。
希望这有帮助
修改强>
我不是试图说你关注的例子很糟糕。它仍然是一个有效的例子,ArrayAdapters
在需要时完成工作。我只是认为你的问题是非常有效的,你还没有看到大图,因为这个例子非常具体。