can't addRange() to listview xamarin.android


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>();

最新更新