android - 如何获取 ListView 的项目 onItemClick 的光标值?

标签 android android-listview onitemclicklistener onitemclick

我创建了一个包含表(类别)和列(_id、标题等)的数据库。我想从我的数据库中读取这些类别的数据并将它们列在 ListView 中。

这是我的代码:

   public class MainActivity extends listActivity{

    private ArrayAdapter arrayAdapter;
    ArrayList results = new ArrayList();
    ListView catlist;
    Cursor cur;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        catlist = getListView();

        int parentid = getIntent().getIntExtra("catid", 0);
        openAndQueryDatabase(parentid);

        displayCatListView();

    }

    private void displayCatListView() {

        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results));


        catlist.setOnItemClickListener(new OnItemClickListener() {

               @Override
               public void onItemClick(AdapterView<?> parent, View v,
                 final int position, long id) {


                Toast.makeText(MainActivity.this,
                  "List View Clicked:" + position, Toast.LENGTH_LONG)
                  .show();
               }
              });     

    }

    private void openAndQueryDatabase(int parentid) {
        DataBaseHelper db = new DataBaseHelper(this);

        SQLiteDatabase dbr = db.getReadableDatabase();
        cur = dbr.rawQuery(
                "SELECT _id, title, has_sub FROM categories where parent_id=?",
                new String[] { String.valueOf(parentid) });


        if (cur != null) {
            while (cur.moveToNext()) {

                int cat_id = cur.getInt(cur.getColumnIndex("_id"));
                String cattitle = cur.getString(cur.getColumnIndex("title"));
                int has_sub = cur.getInt(cur.getColumnIndex("has_sub"));
                results.add(cat_id + cattitle + has_sub);
            }
            cur.close();
        }

        db.close();

    }
}
  1. 我可以在 ItemClick 上获取项目的位置,但我想在 ItemClick 上获取其行的 _id。我该怎么做?
  2. 我是新手。我的代码有错误吗?

非常感谢。

最佳答案

改用 CursorAdapter( http://developer.android.com/reference/android/widget/CursorAdapter.html ),当您使用 ArrayAdapter 时,它会超出内存分配,而且如果 db 更改,您也不会收到通知。

此外,如果使用 CursorAdapter,您将拥有

public void onItemClick(AdapterView<?> parent, View v, final int position, long id)

“id”参数将与表的 _id 字段一致

得到整行就可以了

adapter.getItem(int position)

关于android - 如何获取 ListView 的项目 onItemClick 的光标值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17632726/

相关文章:

android - LayoutInflater 有时(随机)以错误的背景颜色膨胀

android - 无法将标题 View 添加到列表 - setAdapter 已被调用

android - ListActivity的onListItemClick不起作用

java - 在同一 Activity 上多次调用 OnItemClick 方法 :

android - 从 Activity 启动 Fragment 或保存数据并返回到上一个 Fragment

android - 安卓版 Qt : change the application icon

java - Android:用文本文件中的项目填充微调器

android - 使用 Canvas 垂直和水平居中文本

android - 在 ListView 中单击项目时,如何获取 sqlite 数据库中表的行 ID

android - Eclipse、Android、Scala 变得简单但仍然无法正常工作