Grocery List

// MainActivity.java package com.example.grocerylist; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private EditText itemNameEditText; private EditText itemCostEditText; private Button addItemButton; private Spinner itemsSpinner; private LinearLayout selectedItemsLayout; private TextView totalCostTextView; private Button calculateTotalButton; private SQLiteDatabase database; private static final String DATABASE_NAME = "GroceryList"; private static final String TABLE_GROCERY = "grocery_items"; private static final String COLUMN_ID = "id"; private static final String COLUMN_NAME = "name"; private static final String COLUMN_COST = "cost"; private List itemNames = new ArrayList(); private Map itemCosts = new HashMap(); private Map selectedItems = new HashMap(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initialize UI elements itemNameEditText = findViewById(R.id.itemNameEditText); itemCostEditText = findViewById(R.id.itemCostEditText); addItemButton = findViewById(R.id.addItemButton); itemsSpinner = findViewById(R.id.itemsSpinner); selectedItemsLayout = findViewById(R.id.selectedItemsLayout); totalCostTextView = findViewById(R.id.totalCostTextView); calculateTotalButton = findViewById(R.id.calculateTotalButton); // Create or open the database database = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null); // Create the grocery table if it doesn't exist database.execSQL( "CREATE TABLE IF NOT EXISTS " + TABLE_GROCERY + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT UNIQUE, " + COLUMN_COST + " REAL)"); // Load grocery items from database loadGroceryItems(); // Set up spinner setupSpinner(); // Add item button click listener addItemButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addGroceryItem(); } }); // Calculate total button click listener calculateTotalButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { calculateTotal(); } }); } private void setupSpinner() { ArrayAdapter adapter = new ArrayAdapter( this, android.R.layout.simple_spinner_item, itemNames); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); itemsSpinner.setAdapter(adapter); itemsSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { String selectedItem = itemNames.get(position); addItemToSelection(selectedItem); } @Override public void onNothingSelected(AdapterView parent) { // Do nothing } }); } private void loadGroceryItems() { // Clear existing data itemNames.clear(); itemCosts.clear(); // Query all items from the database Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_GROCERY, null); if (cursor.moveToFirst()) { int nameIndex = cursor.getColumnIndex(COLUMN_NAME); int costIndex = cursor.getColumnIndex(COLUMN_COST); if (nameIndex >= 0 && costIndex >= 0) { do { String name = cursor.getString(nameIndex); double cost = cursor.getDouble(costIndex); itemNames.add(name); itemCosts.put(name, cost); } while (cursor.moveToNext()); } } cursor.close(); } private void addGroceryItem() { String itemName = itemNameEditText.getText().toString().trim(); String costString = itemCostEditText.getText().toString().trim(); if (itemName.isEmpty() || costString.isEmpty()) {

Apr 16, 2025 - 04:56
 0
Grocery List

// MainActivity.java

package com.example.grocerylist;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private EditText itemNameEditText;
    private EditText itemCostEditText;
    private Button addItemButton;
    private Spinner itemsSpinner;
    private LinearLayout selectedItemsLayout;
    private TextView totalCostTextView;
    private Button calculateTotalButton;

    private SQLiteDatabase database;
    private static final String DATABASE_NAME = "GroceryList";
    private static final String TABLE_GROCERY = "grocery_items";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_NAME = "name";
    private static final String COLUMN_COST = "cost";

    private List itemNames = new ArrayList<>();
    private Map itemCosts = new HashMap<>();
    private Map selectedItems = new HashMap<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize UI elements
        itemNameEditText = findViewById(R.id.itemNameEditText);
        itemCostEditText = findViewById(R.id.itemCostEditText);
        addItemButton = findViewById(R.id.addItemButton);
        itemsSpinner = findViewById(R.id.itemsSpinner);
        selectedItemsLayout = findViewById(R.id.selectedItemsLayout);
        totalCostTextView = findViewById(R.id.totalCostTextView);
        calculateTotalButton = findViewById(R.id.calculateTotalButton);

        // Create or open the database
        database = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);

        // Create the grocery table if it doesn't exist
        database.execSQL(
                "CREATE TABLE IF NOT EXISTS " + TABLE_GROCERY + " (" +
                        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                        COLUMN_NAME + " TEXT UNIQUE, " +
                        COLUMN_COST + " REAL)");

        // Load grocery items from database
        loadGroceryItems();

        // Set up spinner
        setupSpinner();

        // Add item button click listener
        addItemButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addGroceryItem();
            }
        });

        // Calculate total button click listener
        calculateTotalButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                calculateTotal();
            }
        });
    }

    private void setupSpinner() {
        ArrayAdapter adapter = new ArrayAdapter<>(
                this, android.R.layout.simple_spinner_item, itemNames);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        itemsSpinner.setAdapter(adapter);

        itemsSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView parent, View view, int position, long id) {
                String selectedItem = itemNames.get(position);
                addItemToSelection(selectedItem);
            }

            @Override
            public void onNothingSelected(AdapterView parent) {
                // Do nothing
            }
        });
    }

    private void loadGroceryItems() {
        // Clear existing data
        itemNames.clear();
        itemCosts.clear();

        // Query all items from the database
        Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_GROCERY, null);

        if (cursor.moveToFirst()) {
            int nameIndex = cursor.getColumnIndex(COLUMN_NAME);
            int costIndex = cursor.getColumnIndex(COLUMN_COST);

            if (nameIndex >= 0 && costIndex >= 0) {
                do {
                    String name = cursor.getString(nameIndex);
                    double cost = cursor.getDouble(costIndex);

                    itemNames.add(name);
                    itemCosts.put(name, cost);
                } while (cursor.moveToNext());
            }
        }

        cursor.close();
    }

    private void addGroceryItem() {
        String itemName = itemNameEditText.getText().toString().trim();
        String costString = itemCostEditText.getText().toString().trim();

        if (itemName.isEmpty() || costString.isEmpty()) {
            Toast.makeText(this, "Please enter both item name and cost", Toast.LENGTH_SHORT).show();
            return;
        }

        try {
            double cost = Double.parseDouble(costString);

            ContentValues values = new ContentValues();
            values.put(COLUMN_NAME, itemName);
            values.put(COLUMN_COST, cost);

            // Try to insert the item
            long result = database.insert(TABLE_GROCERY, null, values);

            if (result == -1) {
                // If insert failed, try to update instead (item might already exist)
                int updateResult = database.update(TABLE_GROCERY, values, COLUMN_NAME + " = ?",
                        new String[]{itemName});

                if (updateResult > 0) {
                    Toast.makeText(this, "Item updated successfully", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Failed to add item", Toast.LENGTH_SHORT).show();
                    return;
                }
            } else {
                Toast.makeText(this, "Item added successfully", Toast.LENGTH_SHORT).show();
            }

            // Clear input fields
            itemNameEditText.setText("");
            itemCostEditText.setText("");

            // Reload grocery items
            loadGroceryItems();

            // Update spinner
            ((ArrayAdapter) itemsSpinner.getAdapter()).notifyDataSetChanged();

        } catch (NumberFormatException e) {
            Toast.makeText(this, "Please enter a valid cost", Toast.LENGTH_SHORT).show();
        }
    }

    private void addItemToSelection(final String itemName) {
        // Check if the item is already in the selection layout
        for (int i = 0; i < selectedItemsLayout.getChildCount(); i++) {
            View view = selectedItemsLayout.getChildAt(i);
            if (view instanceof CheckBox) {
                CheckBox checkBox = (CheckBox) view;
                if (checkBox.getText().toString().equals(itemName)) {
                    // Item already exists in selection, just return
                    return;
                }
            }
        }

        // Create a new checkbox for the selected item
        final CheckBox itemCheckBox = new CheckBox(this);
        itemCheckBox.setText(itemName);
        itemCheckBox.setChecked(true);

        // Add the item to the selected items map
        selectedItems.put(itemName, true);

        // Set checkbox change listener
        itemCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
            selectedItems.put(itemName, isChecked);
        });

        // Add checkbox to layout
        selectedItemsLayout.addView(itemCheckBox);
    }

    private void calculateTotal() {
        double total = 0.0;

        // Iterate through selected items
        for (Map.Entry entry : selectedItems.entrySet()) {
            if (entry.getValue()) {
                String itemName = entry.getKey();
                Double cost = itemCosts.get(itemName);
                if (cost != null) {
                    total += cost;
                }
            }
        }

        // Display the total cost
        totalCostTextView.setText(String.format("Total Cost: $%.2f", total));
    }

    @Override
    protected void onDestroy() {
        database.close();
        super.onDestroy();
    }
}

//main_activity.xml