簡體   English   中英

如何使用listview.GetItemAtPosition(e.Position)獲取用戶單擊的ListView項目的數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM