ListView und CursorAdapter...

Z

zerop

Neues Mitglied
1
Hallo,
ich arbeite zur gerade an meiner ersten App, und stehe gerade ein wenig auf dem Schlauch:
Es geht um eine App, die unter anderem eine Einkaufliste beinhaltet, die über eine MySQL Datenbank mit anderen Teilnehmern synchronisiert wird.
Das Hinzufügen von neuen Einträgen und die Synchronisation der SQLite-DB mit der MySQL-DB läuft schon. Woran ich jetzt hänge, ist das ändern von Datenbankeinträgen.

Ich habe also eine ListView, die durch einen CursorAdapter gefüllt wird. Dieser holt sich die Daten aus der lokalen SQLite-DB (die wurde vorher mit der MySQL-DB synchronisiert). Jedes Element besteht aus drei Views: Zwei TextViews und eine CheckBox. Wenn die CheckBox angeklickt wird, soll der neue Wert (true/false) in die Datenbanken geschrieben werden. Dafür brauche ich allerdings die ID des Elements.
Ich habe auch schon die Idee gehabt, ein unsichtbares TextView mit der ID zu jedem Listenelement hinzuzufügen, aber ich weiß nicht, wie ich von der CheckBox zu dem passenden TextView mit der ID komme.
So wie es jetzt ist, wird immer das letzte Element geändert, welches beim Scrollen vorher in den Screen gerutscht ist...

Code:
public class ShoppingListCursorAdapter extends CursorAdapter {

    // column names
    private static final String KEY_SHOPPING_LIST_ITEM_ID = "_id";
    private static final String KEY_SHOPPING_LIST_ITEM_NAME = "name";
    private static final String KEY_SHOPPING_LIST_ITEM_QUANTITY = "quantity";
    private static final String KEY_SHOPPING_LIST_ITEM_BOUGHT = "bought";

    private MySQLHandler mysql;

    // views in row
    private TextView tvID;
    private TextView tvName;
    private TextView tvQuantity;
    private CheckBox cbBought;

    // list item variables
    private int id;
    private String name;
    private int quantity;
    private boolean bought;

    public ShoppingListCursorAdapter(Context context, Cursor cursor){
        super(context, cursor, 0);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return LayoutInflater.from(context).inflate(R.layout.list_shopping_list, parent, false);
    }

    @Override
    public void bindView(View view, final Context context, final Cursor cursor) {

        // get MySQL Handler
        mysql = new MySQLHandler(context);

        // find views
        tvID = (TextView) view.findViewById(R.id.shopping_item_id);
        tvName = (TextView) view.findViewById(R.id.shopping_item_name);
        tvQuantity = (TextView) view.findViewById(R.id.shopping_item_quantity);
        cbBought = (CheckBox) view.findViewById(R.id.shopping_list_bought);

        // get items from offline database
        id = cursor.getInt(cursor.getColumnIndex(KEY_SHOPPING_LIST_ITEM_ID));
        name = cursor.getString(cursor.getColumnIndex(KEY_SHOPPING_LIST_ITEM_NAME));
        quantity = cursor.getInt(cursor.getColumnIndex(KEY_SHOPPING_LIST_ITEM_QUANTITY));

        // convert int to boolean
        if(cursor.getInt(cursor.getColumnIndex(KEY_SHOPPING_LIST_ITEM_BOUGHT)) == 0)
            bought = false;
        else
            bought = true;


        // fill Views with data
        tvID.setText(Integer.toString(id));
        tvName.setText(name);
        tvQuantity.setText(Integer.toString(quantity));
        cbBought.setChecked(bought);

        // OnClickListener for checkbox
        cbBought.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mysql.updateShoppingListItem(id, name, quantity, cbBought.isChecked());
            }
        });
    }
}


Der ursprüngliche Beitrag von 14:25 Uhr wurde um 14:40 Uhr ergänzt:

kleine Korrektur in der OnClick Methode:
Code:
mysql.updateShoppingListItem(id, name, quantity, ((CheckBox)v.findViewById(R.id.shopping_list_bought)).isChecked());
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.021
swa00
swa00
M
  • MikelKatzengreis
Antworten
5
Aufrufe
126
swa00
swa00
D
Antworten
9
Aufrufe
1.765
jogimuc
J
Zurück
Oben Unten