簡體   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