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...
Der ursprüngliche Beitrag von 14:25 Uhr wurde um 14:40 Uhr ergänzt:
kleine Korrektur in der OnClick Methode:
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());