У меня есть ListView, который заполняется CursorAdapter.Каждый элемент в ListView имеет спиннер, кнопку и флажок.Мне нужно обновить значения в базе данных, когда пользователь выбирает что-то в счетчике, ставит флажок или нажимает кнопку.Проблема в том, что я не знаю, как получить доступ к идентификатору для записи базы данных, чтобы обновить его.Каждый раз, когда что-либо в любом из элементов списка изменяется, оно обновляет значения для последнего элемента списка.
Я пытался использовать setTag () и getTag () для моих трех представлений, но когда getTag () вызывается в слушателе, я получаю ноль значение.Как я могу получить идентификатор для моего текущего элемента списка?
ОБНОВЛЕНИЕ: Хорошо, я все ближе к решению дела.Моя проблема сейчас в том, что я не знаю, как правильно установить и получить метку для счетчика.Я пытался получить тег из родительского AdapterView, но это не так.
public class DoorSelectorCursorAdapter extends CursorAdapter {
private ProjectsDBHelper mDbHelper;
Button bDelete;
Spinner spDoor;
TextView tvDoorName;
CheckBox cbAdded;
String doorID;
long currentID, wallID;
Intent mIntent;
public DoorSelectorCursorAdapter(Context context, Cursor cursor, Intent intent) {
super(context, cursor, 0);
final String LOG_TAG = DoorSelectorCursorAdapter.class.getSimpleName();
Log.v(LOG_TAG, "DoorSelectorCursorAdapter инициализирован");
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.selector_list_item, parent, false);
}
// The bindView method is used to bind all data to a given view
// such as setting the text on a TextView.
@Override
public void bindView(final View view, Context context, final Cursor cursor) {
final String LOG_TAG = DoorSelectorCursorAdapter.class.getSimpleName();
Log.v(LOG_TAG, "вызван BindView");
currentID = cursor.getLong(cursor.getColumnIndex(DataContract.WallDoorEntry.COLUMN_WALLDOOR_ID));
wallID = cursor.getLong(cursor.getColumnIndex(DataContract.WallDoorEntry.COLUMN_WALLDOOR_IDWALL_FK));
spDoor = (Spinner) view.findViewById(R.id.spinner_item);
tvDoorName = (TextView) view.findViewById(R.id.selector_itemName);
cbAdded = (CheckBox) view.findViewById(R.id.selector_checkbox);
bDelete = (Button) view.findViewById(R.id.selector_button_delete);
spDoor.setTag(currentID);
cbAdded.setTag(currentID);
bDelete.setTag(currentID);
//res[0] = (cursor.getInt(cursor.getColumnIndex(DataContract.WallDoorEntry.COLUMN_WALLDOOR_IDDOOR_FK)) - 1);
// final long[] iCurrentSelection = new long[1];
// iCurrentSelection[0] = spDoor.getSelectedItemPosition();
int currentPosition = cursor.getPosition();
tvDoorName.setText("Дверь " + (currentPosition + 1));
if(cursor.getInt(cursor.getColumnIndex(DataContract.WallDoorEntry.COLUMN_WALLDOOR_EXISTS)) == 1){
cbAdded.setChecked(true);
} else if(cursor.getInt(cursor.getColumnIndex(DataContract.WallDoorEntry.COLUMN_WALLDOOR_EXISTS)) == 0) {
cbAdded.setChecked(false);
}
final Cursor doorCursor = context.getContentResolver().query(DataContract.DoorEntry.CONTENT_URI, null, null, null, null);
if (doorCursor.getCount() > 0){
DoorCursorAdapter doorAdapter = new DoorCursorAdapter(context, doorCursor);
spDoor.setAdapter(doorAdapter);
}
if(cursor.getString(cursor.getColumnIndex(DataContract.WallDoorEntry.COLUMN_WALLDOOR_IDDOOR_FK)) != null){
spDoor.setSelection(cursor.getInt(cursor.getColumnIndex(DataContract.WallDoorEntry.COLUMN_WALLDOOR_IDDOOR_FK)) - 1);
}
spDoor.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// if (res[0] == id){
// }
// else {
// spDoor.setSelection(cursor.getInt(cursor.getColumnIndex(DataContract.WallDoorEntry.COLUMN_WALLDOOR_IDDOOR_FK)) - 1);
// }
// if (iCurrentSelection[0] != id){
// // Your code here
int intID = (Integer) view.getTag();
doorID = String.valueOf(id);
updateEntry(intID);
// }
// iCurrentSelection[0] = id;
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
cbAdded.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int intID = (Integer) view.getTag();
updateEntry(intID);
}
});
// cbAdded.setOnClickListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// updateEntry();
// }
// }
// );
bDelete.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
deleteEntry(cursor, arg0.getTag());
}
});
}
private void deleteEntry(Cursor cursor, Object tag) {
mContext.getContentResolver().delete(DataContract.WallDoorEntry.CONTENT_URI, DataContract.WallDoorEntry.COLUMN_WALLDOOR_ID + " LIKE " + tag, null);
// Cursor newCursor = mContext.getContentResolver().query(DataContract.WallDoorEntry.CONTENT_URI, null,DataContract.WallDoorEntry.COLUMN_WALLDOOR_IDWALL_FK + " LIKE " + wallID, null, null);
// super.swapCursor(newCursor);
}
private void updateEntry(int tagID) {
ContentValues entryValues = new ContentValues();
entryValues.put(DataContract.WallDoorEntry.COLUMN_WALLDOOR_IDDOOR_FK, doorID);
int checked = 0;
if (cbAdded.isChecked() == true){
checked = 1;
}
entryValues.put(DataContract.WallDoorEntry.COLUMN_WALLDOOR_EXISTS, checked);
int numOfUpdatedEntries = mContext.getContentResolver().update(DataContract.WallDoorEntry.CONTENT_URI, entryValues,
DataContract.WallDoorEntry.COLUMN_WALLDOOR_ID + " LIKE " + tagID, null);
}
}