Android:是仅在onCreate()中声明/实例化的适配器吗?

问题描述 投票:0回答:1

我可以把它归结为两个问题:

  1. 正如标题所示,onCreate()是唯一创建适配器的地方吗?
  2. 我正在关注this指南来创建一个Gridview,除了我从Spotify API中获取一个播放列表列表。问题是当我在onCreate()中创建适配器时,我手边没有播放列表,这意味着当我创建GridViewAdapter时,我传入null。有设计建议吗?

感谢您的反馈和时间。

java android gridview spotify
1个回答
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(...),它就会填充适配器的数据并通知它数据已更改。

您甚至可以将最后两种方法 - setDatanotifyDataSetChanged - 分开,并让设置数据只设置数据并随时调用notifyDataSetChanged()

希望这可以帮助

编辑

无论如何,我并没有试图说你关注的例子很糟糕。它仍然是一个有效的例子,ArrayAdapters在需要时完成工作。我只是认为你的问题是非常有效的,你还没有看到大局,因为这个例子非常具体。

© www.soinside.com 2019 - 2024. All rights reserved.