Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用数据库中的数据填充列表视图_Android_Sqlite_Listview_Simplecursoradapter - Fatal编程技术网

Android 使用数据库中的数据填充列表视图

Android 使用数据库中的数据填充列表视图,android,sqlite,listview,simplecursoradapter,Android,Sqlite,Listview,Simplecursoradapter,所以我的问题是我创建了一个listview,并使用一个简单的游标适配器填充它。因此,现在当我单击listview上的某个项目时,它会将我带到另一个活动,该活动假定会向我显示我单击的项目的详细信息。这方面最好的方法是什么?下面是我填充列表视图的函数。下一个活动我应该发送什么?我曾考虑发送该职位,但这不起作用,因为在下一个活动中,我必须使用该职位访问数据库,但这并不准确,因为数据库可能会删除行,从而返回不同的数据行。任何想法都将受到赞赏 private void populateListView()

所以我的问题是我创建了一个listview,并使用一个简单的游标适配器填充它。因此,现在当我单击listview上的某个项目时,它会将我带到另一个活动,该活动假定会向我显示我单击的项目的详细信息。这方面最好的方法是什么?下面是我填充列表视图的函数。下一个活动我应该发送什么?我曾考虑发送该职位,但这不起作用,因为在下一个活动中,我必须使用该职位访问数据库,但这并不准确,因为数据库可能会删除行,从而返回不同的数据行。任何想法都将受到赞赏

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方法中执行此操作)<