views:

198

answers:

2

I am using a TabActivity (Main) with 3 TabSpecs I am using Intents for the content of the 3 Tabs TabA, TabB, TabC for example.

All these tab activities use common data that is stored in SharedPreferences

In the Main TabActivity I have an options menu which has a refresh option.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.refresh_menu:
        new updateCommonDataFromWeb().execute();

    ...
    }
}

this refresh uses an AsyncTask (updateCommonDataFromWeb) to reload the common data from the web.

I need a way to tell the 3 tab activities to refresh their views and rebuild their content from the newly downloaded data.

When the tab activities are first created they load the data from SharedPreferences like so:

public class TabA extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.taba);

        SharedPreferences prefs = getSharedPreferences(this.getString(R.string.prefs_name), 0);
        String usage_data = prefs.getString("common_data", "");
    }
}

I thought about making a common method on each of the tab activities like.... reloadViewData()

I thought maybe I could use the activity manager from the Main TabActivity to get the activity of the current tab like so:

String tabTag = tabHost.getCurrentTabTag();
Activity activity = getLocalActivityManager().getActivity(tabTag);
# then call the reloadData() method of the tab activity
activity.reloadViewData();

Unfortunately i cant get this approach to work, whilst activity is the correct instance its an Activity instead of a TabA,TabB or TabC

Maybe i've completely taken the wrong approach to the whole thing.

I have also read alot about not using Activities for tab content instead using views. However I dont know what view to use to replace my <RelativeLayout /> as i cant use my R.layout.* as views.

Any help would be gratefully received.

--Rob

A: 

You can extend Activity and make all your child activities to inherit from your extended activity, as this way you will implement the same code (service handling) in 1 activity(the parent).

Activity -> MyParentActivity -> MyChildActivity1

This way you will be able to cast all your child activities to MyParentActivity and run your custom method (you want to be implemented)

Pentium10
Sounds like a simple idea, cheers, i'll give it a try!
Rob
+1  A: 

If you change the common_data in the sharedPreferences you can also implement OnSharedPreferenceChangeListener in the Activites and check for key.equals("common_data").

white_gecko