Fragments and SQLite - can't delete row
I'm trying to delete row from my database and listview but it doesn't work
as it is supposed to, I mean it only works when I start a program and then
delete it - after I add new row or change tab and try to delete it nothing
happens. Here is my code:
public boolean deleteLesson(Lesson lesson) {
String where = DatabaseHelper.LESSONS_ID + "=" + lesson.getId();
return db.delete(DatabaseHelper.TABLE_LESSONS, where, null) > 0;
}
Fragment:
public class Monday extends SherlockFragment {
private static final String DAY_TAG = "MONDAY";
private static final int MENU_REMOVE = 1;
private ListView mList;
private List<Lesson> mLessons;
private LessonsAdapter mAdapter;
private DatabaseManager mDatabase;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.monday, container, false);
mList = (ListView) view.findViewById(R.id.monday);
if(mAdapter != null) {
mAdapter.notifyDataSetChanged();
}
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mDatabase = new DatabaseManager(getActivity());
getData();
registerForContextMenu(mList);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(Menu.NONE, MENU_REMOVE, Menu.NONE, "Remove");
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo)
item.getMenuInfo();
switch (item.getItemId()) {
case MENU_REMOVE:
deleteEntry(info.position);
return true;
default:
return super.onContextItemSelected(item);
}
}
private void getData() {
mDatabase.open();
mLessons = mDatabase.getLessonsFromDay(DAY_TAG);
mDatabase.close();
mAdapter = new LessonsAdapter(getActivity(), R.layout.days_list,
mLessons);
mList.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
private void deleteEntry(int position) {
Lesson lesson = mAdapter.getItem(position);
mDatabase.open();
mDatabase.deleteLesson(lesson);
mDatabase.close();
mAdapter.remove(lesson);
mAdapter.notifyDataSetChanged();
}
}
Adapter:
public class LessonsAdapter extends ArrayAdapter<Lesson> {
private Activity context;
private List<Lesson> lessons;
public LessonsAdapter(Activity context, int textViewResourceId,
List<Lesson> lessons) {
super(context, textViewResourceId, lessons);
this.context = context;
this.lessons = lessons;
}
static class ViewHolder {
public TextView start;
public TextView end;
public TextView subject;
public TextView teacher;
public TextView room;
public TextView type;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
View view = convertView;
if(view == null) {
LayoutInflater inflater = context.getLayoutInflater();
view = inflater.inflate(R.layout.days_list, null, true);
viewHolder = new ViewHolder();
viewHolder.start = (TextView) view.findViewById(R.id.start);
viewHolder.end = (TextView) view.findViewById(R.id.end);
viewHolder.subject = (TextView) view.findViewById(R.id.subject);
viewHolder.teacher = (TextView) view.findViewById(R.id.teacher);
viewHolder.room = (TextView) view.findViewById(R.id.room);
viewHolder.type = (TextView) view.findViewById(R.id.type);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
Lesson lesson = lessons.get(position);
viewHolder.start.setText(lesson.getStart());
viewHolder.end.setText(lesson.getEnd());
viewHolder.subject.setText(lesson.getSubject());
viewHolder.teacher.setText(lesson.getTeacher());
viewHolder.room.setText(lesson.getRoom());
viewHolder.type.setText(lesson.getType());
return view;
}
}
What am I missing? Tell me if you need more info.
No comments:
Post a Comment