2012-03-29 10 views
0

1.) Mein main.xml enthält:InvalidCastException auf ListItem Click (Mono für Android)

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

2.) Nach der Liste bevölkern, ich zuweisen, um es ein adapter wie folgt:

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

wobei result ein DataTable ist.

3.) Innerhalb SymbolAdapter habe ich verwendet:

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

4.)list_symbol.xml enthält:

<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.) Und schließlich für Listenelement klicken , Verwende ich folgenden Codeausschnitt:

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(); 
     } 

wie angegeben here.

Aber wenn ich ein Listenelement klicken, es gibt mir folgende Fehlermeldung:

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

bei ((TextView)e.View).Text.

JEDE IDEE, WARUM DIESES PASSIERT? Ich weiß, ich habe viel Code, aber als Anfänger bin ich Mono für Android, so dass jede Hilfe geschätzt.

+1

final TextView Firma = (TextView) findViewById (R.id. "The_id_of_y_textview"); – CodePrimate

+0

debug code und check was genau ist e.View ... sicherlich nicht TextView – Selvin

+0

@litemode ich muss nur sagen dass ... lol ... findViewById aufrufen wird hier nicht funktionieren da du es von Activity aufrufen wirst ... aber es kann helfen, wenn er e.View.findViewById ... verwendet – Selvin

Antwort

2

e.View ist RelativeLayout so dass es zu Textview-Casting wird nicht funktionieren ... statt dessen sollten Sie FindViewById(Resource.Id.tvsym) auf dieser Ansicht (nicht einfach nur, da sie auf Aktivität aufgerufen wird) rufen

Code sollte aussehen wie:

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

EDIT: oder in Mono können Sie:

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

Verwandte Themen