Android 如何获取ListView项的光标值?
我已经创建了一个数据库,其中包含带有列_id、title等的表类别。我想从数据库中读取这些类别的数据,并在ListView中列出它们 这是我的密码:Android 如何获取ListView项的光标值?,android,android-listview,onitemclicklistener,onitemclick,Android,Android Listview,Onitemclicklistener,Onitemclick,我已经创建了一个数据库,其中包含带有列_id、title等的表类别。我想从数据库中读取这些类别的数据,并在ListView中列出它们 这是我的密码: public class MainActivity extends listActivity{ private ArrayAdapter arrayAdapter; ArrayList results = new ArrayList(); ListView catlist; Cursor cur;
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();
}
}
我可以得到物品的位置,但我想得到他们行的id。我该怎么做?
我是新来的。我的代码有错误吗?
非常感谢。代替
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);
创建一个类别类来包含这些值,并使用参数化的ArrayList。差不多
class Category {
public int cat_id;
public String cattitle;
public int has_sub;
public Category(int cat_id, ...) {
// constructor logic here
}
}
及
使用此选项,可以将McClickListener设置为:
catlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
final int position, long id) {
Category clickedCategory = results.get(position);
int id = clickedCategory.cat_id;
// do something with id
}
});
您的ArrayList是ArrayAdapter的数据源,位置对应于其中单击类别的索引。请改用CursorAdapter,当您使用ArrayAdapter时,它超出了内存分配,而且如果数据库发生更改,您也不会收到通知
此外,在使用CursorAdapter的情况下,您将
public void onItemClick(AdapterView<?> parent, View v, final int position, long id)
谢谢你的回答。请你在这一部分解释一下:类类别{public int cat_id;public String cattitle;public int has_sub;public Categoryint cat_id,{//constructor logic here}或者链接一个完整的示例?@ErikR您能指出关于使用object而不是arraylist的完整教程吗?@numediaweb上面的我的代码使用Ji.Mack代码中的原始arraylist来保存Category类的实例。因此,我们将对象与ArrayList一起使用,而不是代替。这是一个更好的答案。从未有过新id是这样工作的+1获取此有用信息。
public void onItemClick(AdapterView<?> parent, View v, final int position, long id)
adapter.getItem(int position)