无法获取所选项目_id

时间:2016-03-31 11:40:36

标签: java android sqlite listview

  

我无法从listView中检索所选项目的ID。   我正在做的逻辑是:我有一个产品显示在listView中。当我点击编辑此产品时,它会将我发送到产品的详细信息页面。这里的产品名称,价格等都会被重新发送,不包括ID。   谁能告诉我我做错了什么?这是代码:   类DatabaseHandler

//addItemToDB
public void addItem(ItemModel item) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(Constants.PRODUCT_ID, item.getItemId());
    values.put(Constants.PRODUCT_NAME, item.getItemName());
    values.put(Constants.PRODUCT_PRICE, item.getItemPrice());
    db.insert(Constants.TABLE_NAME, null, values);
}

> //get all items
public ArrayList<ItemModel> getAllItems() {

    SQLiteDatabase db = getReadableDatabase();

    Cursor cursor = db.query(Constants.TABLE_NAME, new String[]{Constants.PRODUCT_ID, Constants.PRODUCT_NAME, Constants.PRODUCT_PRICE},
            null, null, null, null, Constants.PRODUCT_DATE + " DESC");

    if (cursor.moveToFirst()) {
        do {

            ItemModel model = new ItemModel();

            //format date
            java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance();
            String data = dateFormat.format(new Date(cursor.getLong(cursor.getColumnIndex(Constants.PRODUCT_DATE))));

            model.setItemId(cursor.getInt(cursor.getColumnIndex(Constants.PRODUCT_ID)));
            model.setItemName(cursor.getString(cursor.getColumnIndex(Constants.PRODUCT_NAME)));
            model.setItemPrice(cursor.getDouble(cursor.getColumnIndexOrThrow(Constants.PRODUCT_PRICE)));

            modelArrayList.add(model);

        } while (cursor.moveToNext());
    }
    return modelArrayList;
  

在listViewAdapter中我有getView方法:

 @Override
public View getView(final int position, View convertView, ViewGroup parent) {

    View row = convertView;
    final ViewHolder holder;

    if (row == null || (row.getTag()) == null){

        LayoutInflater inflater = LayoutInflater.from(activity);
        row = inflater.inflate(layoutResource,null);

        holder = new ViewHolder();

        holder.hItemName = (TextView) row.findViewById(R.id.custom_row_productName);
        holder.hItemPrice = (TextView) row.findViewById(R.id.custom_row_productPrice);

        holder.hItemEdit = (ImageView) row.findViewById(R.id.custom_row_edit);

        row.setTag(holder);
    } else {
        holder = (ViewHolder) row.getTag();
    }

    holder.hModel = getItem(position);

    holder.hItemName.setText(holder.hModel.getItemName());
    holder.hItemPrice.setText(String.valueOf(holder.hModel.getItemPrice()));

    holder.hItemEdit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int itemID = holder.hModel.getItemId();
            String itemName = holder.hModel.getItemName();
            String itemPrice = String.valueOf(holder.hModel.getItemPrice());

            Intent intent = new Intent(activity, ItemDetail.class);

            intent.putExtra("id", itemID);
            intent.putExtra("product", itemName);
            intent.putExtra("price", itemPrice);
            intent.putExtra("type", itemType);

            startActivity(activity, intent,null);
        }
    });
  

在onCreate产品的详细信息页面中我有:

Bundle extras = getIntent().getExtras();
if (extras != null) {
            itemProductName.setText(extras.getString("product"));
            itemPrice.setText(extras.getString("price"));
            final int itemID = extras.getInt("id");

            saveButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        dbHandler.updateItem(itemID);
                        Toast.makeText(ItemDetail.this, itemProductName.getText().toString() + " was modified", Toast.LENGTH_SHORT).show();

                        startActivity(new Intent(ItemDetail.this, MainActivity.class));
                    }
                }
            });
    }

1 个答案:

答案 0 :(得分:0)

我发现了问题,只需更换适配器中的一行:

intent.putExtra("id", itemID);

intent.putExtra("id", ""+itemID);

你要做的另一个编辑:

Bundle extras = getIntent().getExtras();
if (extras != null) {
            itemProductName.setText(extras.getString("product"));
            itemPrice.setText(extras.getString("price"));

//Here is the one change 

            final String itemID = extras.getString("id");

            saveButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        dbHandler.updateItem(itemID);
                        Toast.makeText(ItemDetail.this, itemProductName.getText().toString() + " was modified", Toast.LENGTH_SHORT).show();

                        startActivity(new Intent(ItemDetail.this, MainActivity.class));
                    }
                }
            });
    }