我只是在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();
}
请建议我该怎么做以获取id fron表而不是位置。
答案 0 :(得分:1)
尝试以下代码:
将您的id和名称数据放在clist ArrayList中,首先生成getter,setter方法,在myou获取该数据时在该方法中设置您的id和名称,每次在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();
}
答案 1 :(得分: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
Plz告诉我应该写什么来获得国家身份。
答案 2 :(得分:1)
看到没有被接受的答案...... 我这样做了,似乎有效。
我正在使用ListView Activity,SQLiteDatabase和ArrayAdapter
在我的onListItemClick方法中,我实例化一个新对象,使其等于我的适配器中当前位置的任何项目。 任务task = adapter.getItem(arg3);
在我的任务类中,我有一个类型为long的私有变量id,以及该变量的setter和getter。
因此,我可以这样做: long taskId = task.getId();
使用Toast检查此结果产生了SQLite生成的id而不是ListView中的位置,这就是我需要的。
希望这可以帮助别人!
答案 3 :(得分: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();
答案 4 :(得分:0)
你可以在列表项目上设置id,然后在onItemClick上调用getTag()。
答案 5 :(得分:0)
这不可能按照我想要的方式,但以其他方式获得解决方案。在游标循环中,将数据添加到列表中,取另一个ArrayList并仅向其添加id。
clist1.add(id);
现在,在onListItemClick上,您可以获取项目的位置。因此,使用此位置并从其他ArrayList clist1获取id
int country_id=clist1[position];
希望这有帮助。
答案 6 :(得分:0)
我迟了几年,但它可能对其他人有帮助:基本上设置标记,无论你在哪里设置各个视图。
display
然后你可以通过调用getTag()来访问它:
window.onload