I have some values in my database and populating the values in my custom Listview with a custom Cursor Adapter.So when the person clicks on the listView a new Activity is opened and when he selects the delete button the that value or View should disappear and the list should be refreshed.
I had referred to many answers on SO but all of them suggested to removing the value from the database(which is not what I want) and some were using ArrayList and suggested me to use it with custom Array Adapters.But I am using a Cursor adapter.
So my whole question is how do I remove a value or remove a view from the listview?
The Listview item onClick Listener opens a new Activity
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Constants.ROW_NUMBER=position;
TextView getRecordID = (TextView) view.findViewById(R.id.recordID);
Constants.ROW_NUMBER = Integer.parseInt(getRecordID.getText().toString());
Intent editIntent = new Intent(this,NoteDisplay.class);
editIntent.putExtra(Constants.ROW_NAME,Constants.ROW_NUMBER);
startActivity(editIntent);
}
This is the new Activity and on the press of a Menu button the record will marked as deleted but won't be deleted from the database.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case R.id.deletebutton:
DataBaseHelper deletedb = new DataBaseHelper(this);
int deletedata = deletedb.deleteAction(position,System.currentTimeMillis());
Intent dintent = new Intent(this,MainActivity.class);
dintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(dintent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
This is my custom Cursor adapter class,
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(R.layout.customlistview, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
//int getDeleteFlag is initialized above
getDeleteFlag = cursor.getInt(cursor.getColumnIndex(DELETE_FLAG));
if(getDeleteFlag==0)
{
ll = (LinearLayout)view.findViewById(R.id.listViewLayout);
setListViewHeight(ll,context);
if (cursor != null) {
getText = cursor.getString(cursor.getColumnIndex(NOTE_TITLE));
existsRecordID = cursor.getString(cursor.getColumnIndex(RECORD_ID));
datevalue = cursor.getLong(cursor.getColumnIndex(RECORD_DATE));
}
Date newdate = new Date(datevalue);
tv = (TextView) view.findViewById(R.id.content);
recordID = (TextView) view.findViewById(R.id.recordID);
dateET = (TextView) view.findViewById(R.id.date);
tv.setText(getText.trim());
recordID.setText(existsRecordID);
dateET.setText(dateFormatter.format(newdate));
}else{
Toast.makeText(context, "FALSE VALUE", Toast.LENGTH_SHORT).show();
}
}
I am confused whether to remove the view or the value at this point.
I have a row named "deleteflag" in my DB which stores 1=> Deleted 0=>Not deleted.
So only the values which are having 1 will be marked as deleted.
EDIT 1:
The above code in my bindView()
method does not work