user2351122
user2351122

Reputation: 1

keeping data updated between two activities in android

How can I keep data updated between two android activities. I am working on a android album project where the mainactivity is album activity(where I can add remove and rename albums). But when the user clicks on one of the albums just created I start a intent with a photo activity where he can add remove and move photos. All the operations are done for the album in the photoactivity and I use serialization to write the data back to a text file in both activities. The problem is when I back out to the main activity from the photo activity making some changes on a particular album. The mainactivity doesn't know about the updates.

Code in main activity to start the photo intent on a particular album selected by user

albumGridView.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                //Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();

                Intent photoIntent = new Intent(MainActivity.this, Photo.class);
                photoIntent.putExtra("userNode", user);

                photoIntent.putExtra("position", position);
                startActivity(photoIntent);

            //  Toast.makeText(MainActivity.this, position, Toast.LENGTH_SHORT).show();
            }

        });

You see I pass in the user object which is linkedlists of all album and photo nodes which added removed or moved. It is basically the entire user data of the that user. So whenever I start the old reference of the user node is passed on to the photo intent. I have implemented readerUser() and writeUser methods using serialization. I need to keep the reference of the user object in the main activity updated with all the changes in the photo activity..

Upvotes: 0

Views: 210

Answers (5)

k3b
k3b

Reputation: 14775

I used as @Vegito1044 proposed a local BroadcastReceiver in the main Activity that can be triggered from other activities. The relevant code for this looks like this:

public class AlbumActivity extends Activity {
    private BroadcastReceiver myReceiver = null;

    class _AlbumUpdateReceiver extends BroadcastReceiver {
        @Override
        public void onReceive (Context context, Intent intent) {
            Log.i(Global.LOG_CONTEXT, "AlbumActivity.onReceive(intent='" + intent + "')");
            reloadGui();
        }
    }

    @Override
    public void onResume() {
        super.onResume();

        if (myReceiver == null)
        {
            myReceiver = new _AlbumUpdateReceiver();
            IntentFilter filter = new IntentFilter(Global.REFRESH_GUI);
            registerReceiver(myReceiver, filter);
        }

        reloadGui();
    }

    @Override
    public void onPause() {

        if (myReceiver != null)
        {
            unregisterReceiver(myReceiver);
            myReceiver = null;
        }

        super.onPause();
    }

    void reloadGui()
    {
        Log.d(Global.LOG_CONTEXT, "AlbumActivity.refreshGui()");
        ... do what is neccessary to update gui
    }
}

Upvotes: 0

pierrotlefou
pierrotlefou

Reputation: 40821

Use contentProvider to provide unique access to your photo data and implement an Observer design pattern. That is , in on side, inside the the ContentProvider, when dataset changed due to insert ,update,or delete, notify the the contentResolver;on the other side, user has to register the notification by calling getContentResolover().registerContentObserver

Check out those links:

http://developer.android.com/reference/android/content/ContentProvider.html http://developer.android.com/reference/android/content/ContentResolver.html http://mylifewithandroid.blogspot.com/2008/03/observing-content.html

Upvotes: 1

selalerer
selalerer

Reputation: 3934

I think what you need is database. Use sqlite http://developer.android.com/reference/android/database/sqlite/package-summary.html .

That is guessing you also want the data persisted and restored when the application is run a second time.

Upvotes: 0

MarsAtomic
MarsAtomic

Reputation: 10696

Look into implementing an Android Application. The Application class essentially gives you a GUI-less activity that remains constant for the duration of your session. Instead of serializing objects (slow, excess overhead), you can just call a method on your Application to save images to a data structure in the Application.

Using an Application means that any of your normal Activities can obtain a reference to the Application singleton and access any field or method which you expose.

Read the offical doc and do a Google search for some implementation examples, of which there are many.

Upvotes: 0

Related Questions