Android 使用数据库中的数据填充列表视图
所以我的问题是我创建了一个listview,并使用一个简单的游标适配器填充它。因此,现在当我单击listview上的某个项目时,它会将我带到另一个活动,该活动假定会向我显示我单击的项目的详细信息。这方面最好的方法是什么?下面是我填充列表视图的函数。下一个活动我应该发送什么?我曾考虑发送该职位,但这不起作用,因为在下一个活动中,我必须使用该职位访问数据库,但这并不准确,因为数据库可能会删除行,从而返回不同的数据行。任何想法都将受到赞赏Android 使用数据库中的数据填充列表视图,android,sqlite,listview,simplecursoradapter,Android,Sqlite,Listview,Simplecursoradapter,所以我的问题是我创建了一个listview,并使用一个简单的游标适配器填充它。因此,现在当我单击listview上的某个项目时,它会将我带到另一个活动,该活动假定会向我显示我单击的项目的详细信息。这方面最好的方法是什么?下面是我填充列表视图的函数。下一个活动我应该发送什么?我曾考虑发送该职位,但这不起作用,因为在下一个活动中,我必须使用该职位访问数据库,但这并不准确,因为数据库可能会删除行,从而返回不同的数据行。任何想法都将受到赞赏 private void populateListView()
private void populateListView(){
Cursor cursor = myDatabase.getAllData();
String[] fromfieldNames = new String[]{StudentDBOpenHelper.ITEM_NAME_COLUMN};
int[] toViewIDs = new int[] {R.id.textView_itemName};
SimpleCursorAdapter myCursorAdapter;
myCursorAdapter = new SimpleCursorAdapter(getActivity(),
R.layout.indvidualview_layout,cursor,fromfieldNames,toViewIDs,0);
ListView myList = (ListView) getActivity().findViewById(R.id.courseListXML);
myList.setAdapter(myCursorAdapter);
myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent nextActivity = new Intent(getActivity(), CourseWorkItemActivity.class);
nextActivity.putExtra("Item", position);
startActivity(nextActivity);
}
});
}
private void populateListView(){
Cursor=myDatabase.getAllData();
String[]fromfieldNames=新字符串[]{StudentDBOpenHelper.ITEM_NAME_COLUMN};
int[]toViewIDs=newint[]{R.id.textView\u itemName};
SimpleCursorAdapter myCursorAdapter;
myCursorAdapter=新的SimpleCursorAdapter(getActivity(),
R.layout.indvidualview_布局,光标,从字段名到视图ID,0);
ListView myList=(ListView)getActivity().findViewById(R.id.courseListXML);
设置适配器(myCursorAdapter);
myList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Intent nextractivity=新意图(getActivity(),CourseWorkItemActivity.class);
nextActivity.putExtra(“项目”,位置);
StartTactivity(NextTactivity);
}
});
}
我建议将从光标中提取的数据作为额外的意图发送出去。下面是一个示例(比您想要的稍微复杂一点,如在item上单击I显示一个中间对话框以选择编辑或库存(将产品放入商店的过道)选项):-
productlist_csr = shopperdb.getProductsAsCursor();
currentpca = new ProductsCursorAdapter(this, productlist_csr, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
productlistview.setAdapter(currentpca);
productlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
AlertDialog.Builder okdialog = new AlertDialog.Builder(productlistview_context);
okdialog.setTitle(R.string.productlistentryclicktitle);
okdialog.setMessage(R.string.productlistentryclickmessage001);
okdialog.setCancelable(true);
final int pos = position;
okdialog.setNegativeButton(R.string.standardstockproductlist, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(productlistview_context, AddProductToShopActivity.class);
productlist_csr.moveToPosition(pos);
intent.putExtra("Caller", THIS_ACTIVITY);
intent.putExtra("PRODUCTID", productlist_csr.getLong(ShopperDBHelper.PRODUCTS_COLUMN_ID_INDEX));
intent.putExtra("ProductName", productlist_csr.getString(ShopperDBHelper.PRODUCTS_COLUMN_NAME_INDEX));
intent.putExtra("ProductNotes", productlist_csr.getString(ShopperDBHelper.PRODUCTS_COLUMN_NOTES_INDEX));
startActivity(intent);
dialog.cancel();
}
});
okdialog.setPositiveButton(R.string.standardedittext, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(productlistview_context, ProductAddActivity.class);
intent.putExtra("Caller", THIS_ACTIVITY + "Update");
productlist_csr.moveToPosition(pos);
intent.putExtra("ProductName", productlist_csr.getString(ShopperDBHelper.PRODUCTS_COLUMN_NAME_INDEX));
intent.putExtra("ProductNotes", productlist_csr.getString(ShopperDBHelper.PRODUCTS_COLUMN_NOTES_INDEX));
intent.putExtra("PRODUCTID", productlist_csr.getLong(ShopperDBHelper.PRODUCTS_COLUMN_ID_INDEX));
startActivity(intent);
dialog.cancel();
}
});
okdialog.setNeutralButton(R.string.standardbacktext, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
okdialog.show();
}
});
productlist_csr=shopperdb.getProductsAsCursor();
currentpca=新产品CROSORAdapter(此,产品列表\u csr,游标适配器.FLAG\u寄存器\u内容\u观察者);
productlistview.setAdapter(currentpca);
productlistview.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
AlertDialog.Builder OKDALOG=新建AlertDialog.Builder(productlistview\u上下文);
setTitle(R.string.productListentrycktitle);
OKDALOG.setMessage(R.string.ProductListentryckMessage001);
OKDALOG.setCancelable(真);
最终int pos=位置;
okdialog.setNegativeButton(R.string.standardstockproductlist,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
意向意向=新意向(productlistview_上下文,addProductToShipActivity.class);
产品列表\u csr.移动位置(pos);
intent.putExtra(“呼叫者”,本活动);
intent.putExtra(“PRODUCTID”,productlist_csr.getLong(shopperdhelper.PRODUCTS_COLUMN_ID_INDEX));
intent.putExtra(“ProductName”,productlist\u csr.getString(ShopperDBHelper.PRODUCTS\u COLUMN\u NAME\u INDEX));
intent.putExtra(“ProductNotes”,productlist_csr.getString(shopperdhelper.PRODUCTS_COLUMN_NOTES_INDEX));
星触觉(意向);
dialog.cancel();
}
});
okdialog.setPositiveButton(R.string.standardedittext,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
意向意向=新意向(productlistview\u上下文,ProductAddActivity.class);
intent.putExtra(“调用者”,此_活动+“更新”);
产品列表\u csr.移动位置(pos);
intent.putExtra(“ProductName”,productlist\u csr.getString(ShopperDBHelper.PRODUCTS\u COLUMN\u NAME\u INDEX));
intent.putExtra(“ProductNotes”,productlist_csr.getString(shopperdhelper.PRODUCTS_COLUMN_NOTES_INDEX));
intent.putExtra(“PRODUCTID”,productlist_csr.getLong(shopperdhelper.PRODUCTS_COLUMN_ID_INDEX));
星触觉(意向);
dialog.cancel();
}
});
okdialog.setNeutralButton(R.string.standardbacktext,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.cancel();
}
});
okdialog.show();
}
});
注意!ShopperDBHelper.PRODUCTS\u COLUMN\u?????\ u INDEX
相当于各列在光标中的偏移量。我使用intent Extra调用方通知调用活动的启动活动(例如可以从产品、商店或过道调用库存),以便它可以相应地执行操作
在上面的中,position
用于移动到相应的游标行(但是,我认为实际上并不需要这样做,因为游标已经定位好了,但这样做只是以防万一)
我也使用自定义游标,但我认为这不应该成为问题(我从未使用过simpleCursor).我会试试这个!谢谢。需要注意的是,从启动的活动返回时,如果该活动更改了数据库,您应该通过changecoursor
、swapCursor
或notifyDataSetCahnged
重新执行查询并重置适配器以使用新的/修改的游标(我使用了swapCursor,并在onresume方法中执行此操作)<