2009-06-12 8 views
2

Ayant développé de nombreuses applications graphiques de bureau (de Xt à Qt, de Java Awt/Swt/Swing, etc.), j'ai vraiment du mal à m'habituer à Android.Passage de données par des intentions au lieu de constructeurs

Supposons que j'ai la classe d'activité MainView qui appelle explicitement DetailedView via le mécanisme comme indiqué l'intention suivante:

  • Depuis est instancié via onCreate() une classe d'activité comment puis-je personnaliser il? (Aucun constructeur, seulement transmettre des données intentionnellement!)

  • Y at-il un moyen d'obtenir une référence pour l'instance DetailedView dans MainActivity?

  • Existe-t-il un moyen d'obtenir une référence pour l'instance MainActivity dans DetailedView? Comment puis-je transmettre la référence à FrontEnd à la classe DetailedView? Intent.putExtras() permet uniquement à certains types de données de passer à la classe de destinataire d'intention .

    MainActivity { 
        ... 
        FrontEnd fe; 
        ... 
    
        public void onCreate(Bundle savedInstanceState) { 
         ... 
         Intent myIntent = new Intent(this, DetailedView.class); 
         ... 
        } 
    
        protected void onListItemClick(ListView l, View v, int position, long id) { 
         ... 
         startActivityForResult(myIntent,..); 
         ... 
        } 
    } 
    

Répondre

1

Je souvent tricher et utiliser des appels « getInstance » statique pour communiquer entre les activités et points de vue. Cela fonctionne aussi longtemps qu'ils sont tous les deux dans le même proc, et je dois encore avoir un échec d'accès aux données ... mais je suis sûr que ce n'est qu'une question de temps ... SI vous cherchez un hacky solution rapide cela pourrait être, sinon vous devez transmettre des données par des intentions.

2

Une façon de transmettre des données simples entre des activités/services d'une application spécifique consiste à utiliser la fonctionnalité SharedPreferences d'android.

Cela peut ne pas être le code le plus élégant pour faire le travail, mais je créer systématiquement une classe « utilitaire » statique dans mes projets Android pour permettre une ligne obtenir et définir des types de données simples via les préférences partagées

private static final String PREFERENCE_FILE_NAME = "com.snctln.util.test.SharedPreferencesFile"; 
private static final String BOOL_VALUE_ONE = "bValueOne"; 

public static boolean getBooleanValue1(Context context) 
{ 
    SharedPreferences prefs = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE); 
    return prefs.getBoolean(BOOL_VALUE_ONE, true); // return true if the value does not exist 
} 

public static void setBooleanValue1(Context context, int appWidgetId, boolean actualvalue) 
{ 
    SharedPreferences.Editor prefs = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE).edit(); 
    prefs.putBoolean(BOOL_VALUE_ONE, actualvalue); 
    prefs.commit(); 
} 
Questions connexes