Ich habe ein Array von toggleButtons. Es gibt ein 1: 1-Verhältnis von toggleButtons mit der Anzahl der Zeilen in einem Cursor. Ich weise jedem toggleButton im Array eine setId() mit zurückgegebenen Daten vom Cursor zu.Eine Toast-Nachricht in einer setOnCheckedChangeListener-Methode ausführen
Mein Update aktualisiert immer 1 Zeile im Cursor und ich versuche, dieses Problem mit einigen Toast-Nachrichten zu beheben. Das Problem ist, dass ich die Toast-Nachricht nicht anzeigen kann. Ich weiß die Methode ist Listener feuert, weil meine SQL-Update ausgeführt wird, ist es nur, dass es die falsche Zeile ist. Hier ist mein Code.
toggleButton[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
ContentValues values = new ContentValues(); //Create the new content values object for data input
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(isChecked)
{
Toast.makeText(Cart.this.getBaseContext(), "hello", Toast.LENGTH_SHORT).show();
toggleButton[buttonView.getId()].setTextOn("Yes"); //Set the text when the button changes state to on
values.put(Contract.ItemsTable.COLUMN_ONE, 1); //Update the record on the 'status' column to true
String[] itemId = {String.valueOf(buttonView.getId())}; //
db.update(Contract.ItemsTable.TABLE_NAME, values, SmartCartContract.ItemsTable.COLUMN_ITEM_ID + " LIKE ?", itemId); //Update the DB record
} else
{
Toast.makeText(Cart.this.getBaseContext(), "hello", Toast.LENGTH_SHORT).show();
toggleButton[buttonView.getId()].setTextOff("No"); //Set the text when the button changes state to off
values.put(SmartCartContract.ItemsTable.COLUMN_TWO, 0); //Update the record on the 'status' column to false
String[] itemId = {String.valueOf(buttonView.getId())}; //
db.update(Contract.ItemsTable.TABLE_NAME, values, Contract.ItemsTable.COLUMN_ITEM_ID + " LIKE ?", itemId); //Update the DB record
}
}
});
Cart.this.getBaseContext() ist mein letzter Versuch der Optionen, die ich zu verwenden, habe gesehen, zu. Mache ich das falsch?
Ich baue die Tasten dynamisch mit:
toggleButton[i] = new ToggleButton(this); //Create new ToggleButton control for this row
toggleButton[i].setGravity(Gravity.CENTER); //Align the text in the middle
toggleButton[i].setId(cursor.getInt(cursor.getColumnIndex("itemId")));
if (cursor.getInt(cursor.getColumnIndex("itemInCart")) == 1) //Check if marked 'in Cart'
Sie könnten Toast nur den isChecked Wert sofort, keinen Grund, die gleiche Zeile zweimal –
@ cricket_007 zu kopieren - danke für die Antwort. Ich hatte es tatsächlich dort und es hat auch nicht gefeuert. Ich habe es nur zur Fehlerbehebung nach innen verlegt und dann habe ich den Beitrag erstellt –
Außerdem suche ich nicht nach dem booleschen Wert. Dieser Teil funktioniert (Zuweisung der 0 und der 1). Ich aktualisiere die falsche Zeile in der Datenbank, nicht den falschen Wert in der Spalte. –