[英]How to get the data of a ListView item the user has clicked on with listview.GetItemAtPosition(e.Position)?
在Xamarin.Android應用程序中,我有一個以前填充的ListView。 在正確觸發的listview_ItemClick事件處理程序中,我想檢索單擊的listview-item視圖的文本,以便在AlertDialog中顯示有關它的一些信息。
我的代碼無法正常工作,因為我所能得到的只是一個Java.Lang.Object(lvItem),而且我不知道如何從中提取所需的視圖。
private void lv_ItemClick(object sender, AdapterView.ItemClickEventArgs e) {
lvItem = lv.GetItemAtPosition(e.Position);
// lvItem is a Java.Lang.Object
Toast.MakeText(this, + "you clicked" + lvItem, ToastLength.Long).Show();
}
如果我這樣運行,Toast將打印:
您單擊了System.Collections.Generic.Dictionary'2 [System.String,System.String]
請注意,每個ListView行都由兩個TextView組成,我通過將List<Dictionary<string,string>>
傳遞給ListView Adapter構造器來填充ListView。
簡單地說:
列表顯示
| textView1 | textView2 | --->項目1
| textView1 | textView2 | ->第2項
如果用戶單擊ListView的item2,則需要檢索項目2的textView1.Text或textView2.Text。
我還考慮過這樣做:
FindViewById<TextView>(resultsListView.GetItemIdAtPosition(e.Position);
但是適配器GetItemIdAtPosition返回的是long類型而不是int類型,因此我不確定它是否是同一類型的ID。
以下內容也不起作用(我認為它與lv.GetItemAtPosition(e.position)
相同:
lv.Adapter.GetItem(e.Position);
也許有這樣的事情?
lvItem = lv.GetItemAtPosition(e.Position);
盡管我不確定它是否可以與Java對象一起使用,但是也許可以借助此線程來強制轉換該對象? https://forums.xamarin.com/discussion/7894/how-to-convert-a-type-to-java-lang-object
將Java.Lang.Object轉換為C# :
public static class ObjectTypeHelper
{
public static T Cast<T>(this Java.Lang.Object obj) where T : class
{
var propertyInfo = obj.GetType().GetProperty("Instance");
return propertyInfo == null ? null : propertyInfo.GetValue(obj, null) as T;
}
}
試試這個可能會有所幫助
void OnListItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
var listView = sender as ListView;
var t = tableItems[e.Position];
Android.Widget.Toast.MakeText(this, t.Heading,
Android.Widget.ToastLength.Short).Show();
}
List<Dictionary<string,string>> lstItems;
lstItems包含所有列表項,該列表項已加載到listview中。 從listView單擊偵聽器,您將獲得所選項目的位置。 假設是我 。 然后,您可以從lstItems中獲取該項目。
private void lv_ItemClick(object sender, AdapterView.ItemClickEventArgs e) {
Dictionary<string,string> selectedItem=lstItems.get(e.Position);
// toast necessary information using selectedItem object
}
您可以使用一個按鈕來捕捉單擊“Ítem”的按鈕。
您可以像這樣設置Position元素。
int position = FindViewById(Resource.Id.listIncindentes).CheckedItemPosition;
像這樣的元素值。
var value = FindViewById(Resource.Id.listIncindentes).GetItemAtPosition(position);
我認為你可以做這樣的事情((TextView)e.View).getText().toString()
檢查以下代碼以使用“特殊文本視圖”和“列表視圖項”中的其他視圖。
喜歡 :
TextView mTextView =(TextView)listview.getChildAt(0).findViewById(R.id.text);
您可以輕松獲取Listview的列表項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.