2016-12-07 7 views
0

は、私は二つの質問にこれを煮詰めることができます。タイトルが示すようにAndroid:onCreate()で宣言/インスタンス化されたアダプタのみですか?

  1. 、のonCreate()アダプタを作成するための唯一の場所はありますか?

  2. 私は、プレイリストのリストを取得するためにSpotify APIを抜いている以外は、thisガイドを使ってGridviewを作成しています。問題は、アダプタがonCreate()で作成されたときにプレイリストが手元にないことです。つまり、GridViewAdapterを作成するときにnullを渡しています。どんなデザイン提案ですか?

フィードバックと時間をいただきありがとうございます。

+0

1.いいえ、それはしばしば最高の時です。あなたが必要な情報を持っているときにそれを初期化します – codeMagic

+0

入手しました。どうもありがとう。 –

答えて

0

私はあなたが次の例のために2つのことを混ぜていると思います - アダプタの作成とデータの設定です。この例では、AFAIKを必要とするArrayAdapterを使用します。これは、コンストラクタ内のデータです。

があるアダプタにはデファクトスタンダードませんが、ここで私は通常、何をすべきかです:物事の

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()を呼び出します。

希望これは

EDIT

を助け、私はあなたがフォローしている例が悪いと言ってとにかくつもりはありませんよ。これはまだ有効な例であり、必要に応じてArrayAdaptersを実行します。私はちょうどあなたが質問が非常に有効であると思うし、例が非常に具体的であるためにあなたは大きな絵を見ていないと思う。

+0

「これらの最後の2つのメソッドを分離する」と言ったとき、あなたはどのメソッドを参照していますか? –

+0

'' setData''と '' notifyDataSetChanged'' - 私の回答を編集します – Fred

+1

これは機能します。どうもありがとう!私はこれを私の答えとして受け入れます。 –

関連する問題