public class TrackAdapter:BaseAdapter<TrackModel.Track>
{
LayoutInflater _inflater;
List<TrackModel.Track> _tracks;
public TrackAdapter(Context context)//, List<TrackModel.Track> tracks
{
_inflater=LayoutInflater.FromContext(context);
//_tracks=tracks;
}
public void AddMoreList(List<TrackModel.Track> tracks)
{
_tracks.AddRange(tracks);
}
public void AddItems(List<TrackModel.Track> tracks)
{
_tracks = tracks;
}
我已经在设备上进行了测试,但是在AddRange上出现了空异常。如果我将AddMoreList替换为AddItems,那么应用程序将运行。
items = Newtonsoft.Json.JsonConvert.DeserializeObject<TrackModel.RootObject> (result);
TrackAdapter tAdapter = new TrackAdapter (this.Activity);
tAdapter.AddMoreList (items.tracks);
lst.Adapter = tAdapter;
tAdapter.NotifyDataSetChanged ();
作为适配器的初始贡献者,我建议按以下方式执行此操作:
public class TrackAdapter:BaseAdapter<TrackModel.Track>
{
LayoutInflater _inflater;
public List<TrackModel.Track> Tracks {get; set;}
public TrackAdapter(Context context, List<TrackModel.Track> tracks)
{
_inflater = LayoutInflater.FromContext(context);
Tracks = tracks;
}
...
}
这样,您就可以使用预填充的磁道列表初始化适配器,并将其公开为可以操作的属性。
//Initial filled list
TrackAdapter tAdapter = new TrackAdapter (this.Activity, items.tracks);
...
//later in the code where you need to add or remove items
var adapter = lst.Adapter as TrackAdapter;
//add a single track
adapter.Tracks.Add(track);
//add multiple tracks
adapter.Tracks.AddRange(tracks);
//remove a single track
adapter.Tracks.Remove(track);
您必须先初始化_tracks。
_tracks = new List<Track>();