2014-03-13 190 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