Cai
Cai

Reputation: 5323

Android SQLite Refreshing data on view after modification

I have an activity, GridView, that displays the data from my database. When user selects an Account it will load up another activity AccountManager which will contain all details of the selected item from GridView and allow the user to manage it from there (Modify, Delete and whatnot).

PROBLEM:

When user modifies the Account the modifications made do not show up in AccountManager and instead still shows the initial data from GridView. My guess is it's because the data linked to AccountManager from GridView isn't directly linked to the database, rather I use a middle-man for it so the data is in a way static and separate from the database.

QUESTION:

Is there a way to update the data on AccountManager without having to change my code. If so how do I do this, if not what method would allow me to get the data on AccountManager to be linked to the data in my database so any modifications will reflect on AccountManager immediately after modification.

How I pass data from GridView to AccountManager

grid.setOnItemClickListener(new OnItemClickListener() {

 @Override
     public void onItemClick(AdapterView<?> parent, View v, int position,
                                                                long id) {
     try {
    SQLiteCursor cr = (SQLiteCursor) parent.getItemAtPosition(position);
    String name = cr.getString(cr.getColumnIndex(DatabaseHelper.colName));
    int amount = cr.getInt(cr.getColumnIndex(DatabaseHelper.colAmount));
    String purpose = cr.getString(cr.getColumnIndex(DatabaseHelper.colPurpose));
    String Terms = cr.getString(cr.getColumnIndex(DatabaseHelper.colTermsClass));
    String Status = cr.getString(cr.getColumnIndex(DatabaseHelper.colStatClass));
    String date = cr.getString(cr.getColumnIndex(DatabaseHelper.colDate));
    String editdate = cr.getString(cr.getColumnIndex(DatabaseHelper.colEditDate));
    Account acc = new Account(name, amount, purpose,     db.GetTermsID(Terms),date,editdate,db.GetStatID(Status));
    acc.SetID((int) id);

Intent myIntent = new Intent(AccountManager.this, AccountDetails.class);
myIntent.putExtra("AccountObject", acc);
startActivityForResult(myIntent, 0);

  }
 }
}

How I retrieve the data from GridView in AccountManager

final Account Acc = (Account) getIntent().getSerializableExtra("AccountObject");

Upvotes: 1

Views: 221

Answers (1)

harrane
harrane

Reputation: 969

You can use a CursorLoader http://developer.android.com/reference/android/content/CursorLoader.html

or a ContentObserver http://developer.android.com/reference/android/database/ContentObserver.html

Notifying the URI when the data are changed in the ContentProvider ( http://developer.android.com/reference/android/content/ContentProvider.html ), will fire onLoadFinished or onChange of the CursorLoader and ContentObserver respectively

Upvotes: 3

Related Questions