2010-07-25 3 views
1

J'utilise un TabActivity (Main) avec 3 TabSpecs Je suis pour l'utiliser avec le contenu des 3 onglets TabA, TabB, TabC par exemple.Mise à jour des vues des sous-activités de TabActivity de processus d'arrière-plan

Toutes ces activités utilisent des données communes onglet qui sont stockées dans SharedPreferences

Dans le MainTabActivity J'ai un menu d'options qui a une option de rafraîchissement.

@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(); 

    ... 
    } 
} 

cette actualisation utilise un AsyncTask (updateCommonDataFromWeb) pour recharger les données communes à partir du Web.

J'ai besoin d'un moyen de dire aux 3 activités de l'onglet d'actualiser leurs vues et de reconstruire leur contenu à partir des données nouvellement téléchargées.

Lorsque les activités de l'onglet sont d'abord créés, ils chargent les données de SharedPreferences comme ceci:

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", ""); 
    } 
} 

Je pensais à faire une méthode commune sur chacune des activités onglet comme .... reloadViewData()

Je pensais que je pourrais peut-être utiliser le gestionnaire d'activité du MainTabActivity pour obtenir l'activité de l'onglet actuel comme ceci:

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

Malheureusement, je ne peux pas obtenir cette approche au travail, tandis que activity est l'instance correcte son un Activity au lieu d'un TabA, TabB ou TabC

Peut-être que je suis complètement pris la mauvaise approche de la chose.

J'ai aussi beaucoup lu sur le fait de ne pas utiliser Activités pour le contenu des onglets à la place d'utiliser des vues. Cependant, je ne sais pas quelle vue utiliser pour remplacer mon <RelativeLayout /> car je ne peux pas utiliser mon R.layout. * En tant que vues.

Répondre

2

Si vous modifiez le common_data dans le sharedPreferences, vous pouvez également mettre en œuvre OnSharedPreferenceChangeListener dans les activités et vérifiez key.equals("common_data").

0

Vous pouvez étendre Activity et rendre toutes vos activités enfants héritées de votre activité étendue, car vous implémenterez le même code (gestion des services) dans une activité (le parent).

Activity -> MyParentActivity -> MyChildActivity1 

De cette façon, vous serez en mesure de jeter toutes vos activités enfants à MyParentActivity et exécuter votre méthode personnalisée (vous souhaitez être mis en œuvre)

+0

Sonne comme une idée simple, vive, je vais essayer! – Rob

Questions connexes