列表视图项绑定
本文关键字:绑定 视图 列表 | 更新日期: 2023-09-27 17:49:55
我有一个场景,我需要绑定ListView在android xamarin与音频文件名。它应该只显示音频名称的前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);
};
如有任何建议或建议,我将不胜感激
最好的方法是创建自定义适配器。首先,为一行创建自己的布局。将其命名为"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
}