使用数据库

时间:2016-05-09 03:22:26

标签: android sqlite listview simplecursoradapter

所以我的问题是我创建了一个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);

        }
    });
}

1 个答案:

答案 0 :(得分:1)

我建议将从光标中提取的数据作为意图附加内容发送。这是一个例子(比你想要的更复杂一点,如Itemclick我显示一个中间对话框来选择编辑或股票(将产品放入商店的过道)选项。: -

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();
            }
        });

请注意! ShopperDBHelper.PRODUCTS_COLUMN_?????_INDEX等于相应列的光标偏移量。我使用意图Extra 来电来通知调用活动的已启动活动(例如,可以从产品,商店或过道调用股票),以便它可以采取相应的行动。

在上面position用于移动到相应的光标行(但是,我相信这实际上并不需要,因为光标已经定位,但这样做是为了以防万一)。

我也使用自定义光标,但我认为这不应该是一个问题(我从未使用过simpleCursor)。