I have a trouble with update my SQLite database. In my app in StartActivity in onCreate() I called a fillList() function which fills ArrayList myList data from database.
public void fillList(){
myList = new ArrayList<Event>();
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(dbHandler.DATABASE_TABLE4);
String asColumnsToReturn[] = {dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_NAME,
dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_ROWID, dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_HOUR,
dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_DESCRIPTION, dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_NOTIFICATION,
dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_TIME, dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_STAN};
mCursor = queryBuilder.query(dbHandler.mkDatabase, asColumnsToReturn, null, null, null, null, null);
for (mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext()) {
myList.add(new Event(
mCursor.getString(mCursor.getColumnIndex(dbHandler.KEY_NAME)),
mCursor.getString(mCursor.getColumnIndex(dbHandler.KEY_DESCRIPTION)),
mCursor.getString(mCursor.getColumnIndex(dbHandler.KEY_HOUR)),
mCursor.getInt(mCursor.getColumnIndex(dbHandler.KEY_NOTIFICATION)),
mCursor.getInt(mCursor.getColumnIndex(dbHandler.KEY_TIME)),
mCursor.getLong(mCursor.getColumnIndex(dbHandler.KEY_ROWID)),
mCursor.getInt(mCursor.getColumnIndex(dbHandler.KEY_STAN))
)
);
}
mCursor.close();
}
And that function work correctly, but in ListFragment I create list using data from myList, and I have an option to delete records.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View V = inflater.inflate(R.layout.lista_tab, container, false);
//no matter code
ListaFragment.mAdapter = new EventAdapter(getActivity(), StartActivity.myList);
setListAdapter(mAdapter);
mAdapter.setListenerView(ListaFragment.this);
return V;
}
@Override
public void onClickView(int position, View v){
switch(v.getId()){
//other case
case R.id.bucket:
dbHandler.mkDatabase.beginTransaction();
try {
long index = dbHandler.mkDatabase.delete(dbHandler.DATABASE_TABLE4, dbHandler.KEY_ROWID + "=?", new String[]{changeId(StartActivity.myList.get(position).getId())});
dbHandler.mkDatabase.setTransactionSuccessful();
} catch (SQLException e){
Toast.makeText(getActivity(), "Error "+e, Toast.LENGTH_SHORT).show();
} finally {
dbHandler.mkDatabase.endTransaction();
}
StartActivity.myList.remove(position);
mAdapter.notifyDataSetChanged();
break;
}
}
public String changeId (Long id){
String astrArgs[] = { id.toString() };
return astrArgs[0];
}
And everything look like this work correctly - I have no errors, delete function returns 1, mAdapter update view. But if I close my app , and start it again (fillList() is called again), then deleted data comes back to the list. I have no idea what I'm doing wrong. Thanks for any help.
Aucun commentaire:
Enregistrer un commentaire