Pan*_*ana 5 android android-listview android-sqlite
我在本网站上搜索了与此相关的各种问题,但我无法解决我得到的问题.
我想点击listview项目从数据库中获取id
这是我的类别类:
package com.example.reminders;
import java.util.List;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class Categories extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DBAdapter db = new DBAdapter(Categories.this);
        db.open();
        List<String> cs = db.getAllCategoriesList();
        setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_categories,cs));
        ListView listView = getListView();
        listView.setTextFilterEnabled(true);
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // When clicked, show a toast with the TextView text
                 Cursor cur = (Cursor) parent.getItemAtPosition(position);
                Toast.makeText(getApplicationContext(),
                "id:"+id+"position:"+position+"rowid:"+cur.getInt(cur.getColumnIndex("_id")), Toast.LENGTH_LONG).show();
            }
        }); 
        db.close();
    }
}
DBAdapter类中定义的getAllCategoriesList函数是:
//---retrieves all the category data---
    public List<String> getAllCategoriesList() 
    {
        String[] columns = new String[] {KEY_NAME2};
        Cursor c = db.query(DATABASE_TABLE2, columns, null, null, null, null,
            KEY_NAME2);     
       // String results = "";
        List<String> results = new ArrayList<String>();
        int iCM = c.getColumnIndex(KEY_NAME2);
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
            results.add(c.getString(iCM));
        }
        return results;
    }
当我运行示例代码时出现以下错误:
10-01 15:05:22.507: E/AndroidRuntime(20846): java.lang.ClassCastException: java.lang.String cannot be cast to android.database.Cursor
您没有从数据库查询_id(仅限KEY_NAME2列),因此您无法从适配器获取它.
这一行:
Cursor cur = (Cursor) parent.getItemAtPosition(position);
完全错了.您正在尝试转换一个String(由ArrayAdapter<String>光标返回,它永远不会工作.
你需要做的是使用CursorAdapter(或SimpleCursorAdapter)ListView.游标应该至少查询_id和KEY_NAME2.
使用此适配器,getItem(int position)将返回设置为请求位置的光标.那么你需要做的就是cursor.getInt(cursor.getColumnIndex("_id"))和你在一起.
| 归档时间: | 
 | 
| 查看次数: | 8230 次 | 
| 最近记录: |