2014-03-13 126 views
1

我得到了一个场景,我需要将android xamarin中的ListView与音频文件名绑定。 应该只显示音频名称的前5个字符。我做了这个分裂它,它工作正常。列表视图项绑定

adapter = new ArrayAdapter<string> (this , Resource.Layout.list_item ,  Resource.Id.audio_names , lstSearchResult.ToArray()); 
listResult.Adapter = adapter; 

在上面的代码lstSearchResult包含5个字符的音频名称。

问题是:onItemClick我需要获得完整的音频名称,稍后播放。我怎样才能做到这一点?

listResult.ItemClick += delegate(object sender , AdapterView.ItemClickEventArgs e) 
     { 
      string strItem= adapter.GetItem(e.Position); 
     }; 

任何建议/备用VL理解

+0

设定发送者的DataContext的你对象的实例和获取从那里 – safetyOtter

回答

2

最好的事情要做的是创建自定义适配器。 首先为一行创建自己的布局。称之为“SongListRow”(或任何其他名称)。

然后创建一个类歌曲:

public class Song { 
    public string Name { get; set; } 
    public string File { get; set; } 
} 

然后创建适配器:

public class SongListAdapter : BaseAdapter<Song> { 
    private List<Song> _items; 
    private Activity _context; 

    public SongListAdapter(Activity context, List<Song> songs) 
    { 
     this._items = songs; 
     this._context = context; 
    } 

    public override Song this[int position] 
    { 
     get { return this._items[position]; } 
    } 

    public override int Count 
    { 
     get { return this._items.Count; } 
    } 

    public override long GetItemId(int position) 
    { 
     return position; 
    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     var item = this._items[position]; 
     View view = convertView; 
     //If there is nothing to reuse, then create view from your row layout 
     if (view == null) 
      view = this._context.LayoutInflater.Inflate(Resource.Layout.SongListRow, null); 

     view.FindViewById<TextView>(Resource.Id.SongTitle).Text = item.Name; 

     return view; 
    } 
} 

现在,在您的活动,声明一个变量为您的适配器

private SongListAdapter _songsAdapter; 

现在创建歌曲的通用列表,创建适配器并将歌曲列表传递到适配器的构造构造函数。然后,你可以做这样的事情:

listResult.Adapter = this._songsAdapter; 
listResult.ItemClick += (s,e) => { 
    var fileName = this._songsAdapter[e.Position].File; 
    // Play your song 
} 
+0

完整的数据太感谢你了......救了我的一天:) –

+0

高兴我可以帮忙。 –

+0

如果项目被添加,删除等,或者只是在列表中更改 listResult(UI)不会更新。如何处理这个? – Vassilis