ListItem上的InvalidCastException单击(Mono for Android)

时间:2012-03-29 10:58:25

标签: c# android android-listview xamarin.android .net

1。)我的main.xml包含:

<ListView
        android:id="@+id/lsym"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

2。)填充列表后,我正在为其分配adapter,如下所示:

lsym.Adapter=new SymbolAdapter(this,result);

其中resultDataTable

3。)SymbolAdapter内,我使用过:

convertView = inflater.Inflate(Resource.Layout.list_symbol, null);

4。) list_symbol.xml包含:

<RelativeLayout android:id="@+id/symbolLayout" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content">

    <TextView 
        android:id="@+id/tvsym" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

5。)最后,对于列表项目点击,我正在使用以下代码段:

   lsym.ItemClick+= SearchItem_Click;

&安培;

   private void SearchItem_Click(object sender, ItemEventArgs e)
        {
            string  company=((TextView)e.View).Text;
            Toast.MakeText(this, "Selected="+company,ToastLength.Short).Show();
        }

指定here

但是当点击列表项时,它会给我以下错误:

System.InvalidCastException: Cannot cast from source type to destination type.
SearchItem_Click (object,Android.Widget.ItemEventArgs)

((TextView)e.View).Text

任何想法为什么会发生这种情况? 我知道我已经提供了大量的代码,但因为我绝对是初学者,所以任何帮助都是值得赞赏的。

1 个答案:

答案 0 :(得分:2)

e.ViewRelativeLayout,因此将其投放到TextView将无效... 而不是这个,你应该在该视图上调用FindViewById(Resource.Id.tvsym)(不仅仅是普通的,因为它将在Activity上调用)

代码应如下所示:

TextView rowText = (TextView)e.View.FindViewById(Resource.Id.tvsym);

编辑:或者在Mono中你可以使用:

TextView rowText = e.View.FindViewById<TextView>(Resource.Id.tvsym);