2016-03-22 8 views
0

ArrayAdapterを拡張する顧客アダプタ(SongsAdapter)があり、配列にはSongというオブジェクトが含まれています。私のフラグメントonCreateViewメソッドで私はこのアダプタを初期化しようとしています。配列を最初に渡さずにリストビューのアダプタを作成する

adapter = new SongsAdapter(getContext(), arrayOfSongs); 

問題はarrayOfSongsは最初はnullです。ユーザーはiTunesのデータベース上の曲を検索しなければならないと私は応答を得るとき、私はJSONを解析し、曲のオブジェクトを作成し、私のアダプタに追加

adapter.addAll(songs); 

、その後

adapter.notifyDataSetChanged(); 

が、私は例外が発生しています

ユーザーが最初に検索するまでリストビューを非表示にしてから、結果を表示するにはどうすればよいですか。どのようにしてアダプタを適切に初期化できますか?

は、ここに私のアダプタ

public class SongsAdapter extends ArrayAdapter<Song> { 


    public SongsAdapter(Context context, ArrayList<Song> songs) { 

     super(context, 0, songs); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Song song = getItem(position); 

     if (convertView == null) 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_song, parent, false); 

     TextView artistName = (TextView) convertView.findViewById(R.id.artistName); 
     TextView trackName = (TextView) convertView.findViewById(R.id.trackName); 

     artistName.setText(song.getArtist()); 
     trackName.setText(song.getTitle()); 

     return convertView; 
    } 
} 
+1

配列の初期値をnullではなくゼロにします。 –

+0

空のArrayListを初期化して、アダプターの内部でヌル・チェックを使用するのではなく、アダプターに入れる必要があります。 –

答えて

1

には、ArrayListは、同様にgetCountメソッドでnullであるかどうかを確認し、それに応じてデータを返すことができます。

public class SongsAdapter extends BaseAdapter { 

ArrayList<Song> mList; 
Context mContext; 

public SongsAdapter(Context context, ArrayList<Song> songs) { 

    mList = songs; 
    mContext = context; 

} 



@Override 
public int getCount() { 
    if(mList==null) 
    { 

     return 0; 
    } 
    else { 

     return mList.size(); 


    } 
} 

@Override 
public Object getItem(int position) { 
    return mList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     Song song = getItem(position); 

    if (convertView == null) 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_song, parent, false); 

    TextView artistName = (TextView) convertView.findViewById(R.id.artistName); 
    TextView trackName = (TextView) convertView.findViewById(R.id.trackName); 

    artistName.setText(song.getArtist()); 
    trackName.setText(song.getTitle()); 

    return convertView; 
} 
} 

説明が必要な場合は他にも役立つ場合は、これをマークしてください。ハッピーコーディング。

+0

私のアダプタは別ファイルにありますが、どうすれば 'arrayList'(' songs'という名前になります)への参照を得るでしょうか? – Rockstar5645

+0

あなたはarrayOfSongsをアダプタに渡しています。 –

+0

が分かります。兄弟? –