无法将 addRange() 添加到列表视图 xamarin.android

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

你必须先初始化_tracks。

_tracks = new List<Track>();

作为您的适配器的初始贡献者,我建议您按以下方式进行:

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