3

我只是从 sqlite 表中显示一个列表。我没有使用任何 BDHelper 类。仅使用此代码,我如何获得 id。

在此处输入图像描述
当我单击第一项时,它显示 0,如表中所示,它的 id 为 1。下面是我的代码。

SQLiteDatabase myDB;
        try {
            myDB = openOrCreateDatabase(DB_NAME,
                    SQLiteDatabase.CREATE_IF_NECESSARY, null);          
            myDB.execSQL("create table if not exists " + COUNTRY_TABLE
            + "(country_id INTEGER PRIMARY KEY,"
            + "country_title text," 
            + "country_status int(11));");          

             /*myDB.execSQL("insert into " + COUNTRY_TABLE +" values "+
             "(null,'India',1)," +
             "(null,'China',1)," +
             "(null,'Australia',1)," +
             "(null,'Japan',1)," +
             "(null,'Germany',1)");*/


            Cursor c = myDB.rawQuery("select country_id,country_title from "
                    + COUNTRY_TABLE + " where country_status=1", null);
            if (c != null) {
                if (c.moveToFirst()) {
                    do {
                        int id = c.getInt(c.getColumnIndex("country_id"));
                        String name = c.getString(c.getColumnIndex("country_title"));                       
                        clist.add(id + ") " + name);
                    } while (c.moveToNext());
                    //int itemcount = clist.size();
                    //Toast.makeText(MainActivity.this, itemcount, Toast.LENGTH_LONG).show();
                    setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, clist));
                }
            }

        } catch (SQLiteException se) {
            Toast.makeText(MainActivity.this, se.getMessage().toString(),Toast.LENGTH_LONG).show();
        }

protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Toast.makeText(MainActivity.this,String.valueOf(id),Toast.LENGTH_LONG).show();
    }

请建议我应该怎么做才能获得表格而不是职位。

4

7 回答 7

1

试试下面的代码:

将您的 id 和 name 数据放在 clist ArrayList 中,首先生成 getter,setter 方法,当我获取该数据时在该方法中设置您的 id 和 name ,每次将该数据添加到 ArrayList 中,然后像下面一样使用它。

protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Toast.makeText(MainActivity.this,clist.get(position).getId(),Toast.LENGTH_LONG).show();
    }
于 2013-10-08T06:07:16.973 回答
1

看到没有公认的答案......我这样做了,它似乎奏效了。

我正在使用 ListView Activity、SQLiteDatabase 和 ArrayAdapter

在我的 onListItemClick 方法中,我实例化了一个新对象并使其等于适配器中当前位置的任何项目。任务task = adapter.getItem(arg3);

在我的任务类中,我有一个名为 id 的 long 类型的私有变量,以及该变量的 setter 和 getter。

因此,我可以这样做: long taskId = task.getId();

用 Toast 检查这个结果得到了 SQLite 生成的 id 而不是 ListView 中的位置,这是我需要的。

希望这可以帮助某人!

于 2013-11-29T20:45:22.347 回答
1
public List<Emp> AllRecords() 
{
    List<Emp> dataset = new ArrayList<Emp>();
    Cursor cursor = database.query(DatabaseHelper.TABLE_EMPLOYEE,allColumns, null, null,null, null, null);

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        Emp obj = cursorToContact(cursor);
        dataset.add(obj);
      cursor.moveToNext();
    }
    cursor.close();
    return dataset;
}

private Emp cursorToContact(Cursor cursor) 
{
    Emp obj = new Emp();
    obj.setId(cursor.getInt(0));
    obj.setName(cursor.getString(1));
    obj.setDesig(cursor.getString(2));
    return obj;
}


//--------------
list_data = (ArrayList<Emp>) qh.AllRecords();
CustomListAdapter adapter = new CustomListAdapter(MainActivity.this,list_data);
//---------
int id=list_data.get(arg2); //Type mismatch: cannot convert from Emp to int

请告诉我应该写什么来获得国家/地区ID。

于 2013-10-08T12:45:11.250 回答
0

((TextView)v).getText();通过使用它我们将获取视图的文本,然后我们可以再次查询表以获取相应文本的 id 并对其进行烘烤。

 String country_title=((TextView)v).getText();

 Cursor c = myDB.rawQuery("select country_id from "+ COUNTRY_TABLE + " where  country_title='"+country_title+"'", null);
  Toast.makeText(MainActivity.this,c.getString(c.getColumnIndexorThrow("country_title")),Toast.LENGTH_LONG).show();
于 2013-10-08T06:14:15.057 回答
0

这不是我想要的方式,而是以其他方式得到了解决方案。在游标循环中,将数据添加到列表中,获取另一个 ArrayList 并仅向其添加 id。

clist1.add(id);

现在,在 onListItemClick 上,您可以获得项目的位置。所以,使用这个位置并从另一个 ArrayList clist1 中获取 id

int country_id=clist1[position];

希望这可以帮助。

于 2013-12-07T06:47:07.490 回答
0

您可以使用 id 在列表项上设置标签,之后您可以在 onItemClick 上调用 getTag()。

于 2013-10-08T06:41:10.480 回答
0

我晚了几年,但它可能对其他人有所帮助:基本上在您设置个人视图的任何地方设置标签。

  // Find fields to populate in inflated template

    TextView productName = (TextView) view.findViewById(R.id.product_name);
    TextView productPrice = (TextView) view.findViewById(R.id.product_price);
    TextView productQuantity = (TextView) view.findViewById(R.id.product_quantity);

    // Extract properties from cursor

    String name = cursor.getString(cursor.getColumnIndexOrThrow(ProductDbContract.ProductEntry.COLUMN_NAME));
    int price = cursor.getInt(cursor.getColumnIndexOrThrow(ProductDbContract.ProductEntry.COLUMN_PRICE));
    int quantity = cursor.getInt(cursor.getColumnIndexOrThrow(ProductDbContract.ProductEntry.COLUMN_QUANTITY));
    int id = cursor.getInt(cursor.getColumnIndexOrThrow(ProductDbContract.ProductEntry.ID));

    // Set Tag
    productName.setTag(id);

然后你可以通过调用 getTag() 来访问它:

    int id = (Integer)((TextView)findViewById(R.id.product_name)).getTag();

    Log.d("LETSEE",String.valueOf(id));
于 2016-07-06T07:34:38.653 回答