ListActivity und onListItemClick

  • 4 Antworten
  • Neuster Beitrag
L

losh

Neues Mitglied
Threadstarter
hallo!
Ich versuche derzeit vergeblich, in einer ListActivity in der onListItemClick-Methode auf die Daten im Cursor zuzugreifen:

Code:
public class KontakteActivity extends ListActivity 
{
    private static final String TAG = "KontakteActivity";
    private DatabaseHelper dbHelper;
    private SQLiteDatabase dbConnection;
    private Cursor cursor;
    private static final String spalten[] = {"_id","name","telnr","email","zimmer"};    
        
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.kontakteactivity);
        setTitle(getTitle()+" - Kontakte");
        dbHelper = new DatabaseHelper(this);
        dbConnection = dbHelper.getReadableDatabase();
        cursor = dbConnection.query("lehrer", spalten, null, null, null, null, "name");
        startManagingCursor(cursor);
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,cursor,new String[] {"name"}, new int[] {android.R.id.text1});
        setListAdapter(adapter);
        dbConnection.close();
    }
    
    protected void onListItemClick(ListView l, View v, int position, long id) {
        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
    }
}
Beim Aufruf von onListItemClick erhalte ich
Code:
04-10 08:11:51.825: E/AndroidRuntime(285): FATAL EXCEPTION: main
04-10 08:11:51.825: E/AndroidRuntime(285): java.lang.ClassCastException: android.database.sqlite.SQLiteCursor
04-10 08:11:51.825: E/AndroidRuntime(285):     at at.spengergasse.spengerApp.view.KontakteActivity.onListItemClick(KontakteActivity.java:61)
04-10 08:11:51.825: E/AndroidRuntime(285):     at android.app.ListActivity$2.onItemClick(ListActivity.java:321)
04-10 08:11:51.825: E/AndroidRuntime(285):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-10 08:11:51.825: E/AndroidRuntime(285):     at android.widget.ListView.performItemClick(ListView.java:3382)
04-10 08:11:51.825: E/AndroidRuntime(285):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
04-10 08:11:51.825: E/AndroidRuntime(285):     at android.os.Handler.handleCallback(Handler.java:587)
04-10 08:11:51.825: E/AndroidRuntime(285):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 08:11:51.825: E/AndroidRuntime(285):     at android.os.Looper.loop(Looper.java:123)
04-10 08:11:51.825: E/AndroidRuntime(285):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-10 08:11:51.825: E/AndroidRuntime(285):     at java.lang.reflect.Method.invokeNative(Native Method)
04-10 08:11:51.825: E/AndroidRuntime(285):     at java.lang.reflect.Method.invoke(Method.java:521)
04-10 08:11:51.825: E/AndroidRuntime(285):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-10 08:11:51.825: E/AndroidRuntime(285):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-10 08:11:51.825: E/AndroidRuntime(285):     at dalvik.system.NativeStart.main(Native Method)
Hat jemand eine Idee, wo mein Fehler liegt??
Danke im Voraus
 
S

sixi

Fortgeschrittenes Mitglied
Jabb, habe eine Idee. Ich denke er liegt hier:
Code:
04-10 08:11:51.825: E/AndroidRuntime(285): java.lang.ClassCastException: android.database.sqlite.SQLiteCursor
 
L

losh

Neues Mitglied
Threadstarter
danke, sixi...so weit war ich auch schon;)

hast du auch einen konkreten lösungsvorschlag?
 
S

sixi

Fortgeschrittenes Mitglied
Naja getItem() auf den SimpleCursorAdapter sollte dir einen Cursor zurückgeben - in deinem Fall wohl ein "android.database.sqlite.SQLiteCursor". Den Versuchst du in einen String zu casten - was fehl schlägt.

Btw. kannst du das ganze auch selber herausfinden indem du statt dem Cast einfach mal nen "System.out.println(this.getListAdapter().getItem(position))" ausgeben lässt (oder per Log.d) - da wird dir die Klasse im Normalfall ausgegeben ;-)


edit: falls dir das noch nicht konkret genug ist, versuch es mal mit
Code:
Cursor c = (Cursor) getListAdapter().getItem(position);
c.getString(0);  //wenn du nen String erwartest und es eine Spalte 0 gibt, ansonsten halt anpassen...
 
L

losh

Neues Mitglied
Threadstarter
SUPER, DANKE!!! Der Zwischenschritt Cursor.getString() hat mir gefehlt.
Jetzt klappts:
Code:
protected void onListItemClick(ListView l, View v, int position, long id) 
    {
        Cursor c = (Cursor) getListAdapter().getItem(position);
        Intent intent = new Intent(getBaseContext(), KontaktActivity.class);
        intent.putExtra("name", c.getString(1));
        intent.putExtra("email", c.getString(2));
        intent.putExtra("telnr", c.getString(3));
        intent.putExtra("zimmer", c.getString(4));
        startActivityForResult(intent, 0);
    }
 
Oben Unten