繁体   English   中英

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

[英]Android: are adapters only declared/instantiated in onCreate()?

我可以将其归结为两个问题:

  1. 顾名思义, onCreate()是创建适配器的唯一位置吗?

  2. 我正在按照指南创建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种方法- setDatanotifyDataSetChanged -并有一组数据只设置数据并调用notifyDataSetChanged()只要你想。

希望这可以帮助

编辑

无论如何,我并不是要说您要遵循的示例很糟糕。 仍然是一个有效的示例,需要时ArrayAdapters可以完成工作。 我只是认为您的问题非常有效,并且您尚未看到全局,因为该示例非常具体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM