2013-08-08 2 views
0

Donc, genre de situation noob, mais aujourd'hui, par curiosité, j'essayé de faire quelque chose comme:Pourquoi ne pouvons-nous appeler simplement une nouvelle activité()

new Activity().runOnUiThread(new Runnable{...})

surtout parce que je n » N'avoir accès à aucune activité (travailler sur une bibliothèque tierce). J'ai juste l'applicationContext, que je ne pense pas me permet de faire cet appel runOnUiThread.

Donc, je suppose que je me demande s'il existe un moyen de simuler une activité mini-invasive pour que je puisse exécuter quelque chose sur le thread de l'interface utilisateur (ou faire d'autres choses, comme le dialogue contextuel ... etc.) ??

sinon, est-ce que quelqu'un sait ce qui ne va pas avec simplement faire new Activity()? (je veux dire, à part le fait que, oui, j'obtiendrai un pointeur nul parce que je n'ai pas mis mon contexte de base puisque le onCreate pour l'activité n'a jamais été appelé). si possible, je voudrais accepter une réponse qui peut fournir un peu plus de détails et plus « contexte » (sans jeu de mots)

+0

Pouvez-vous nous donner la signature de méthode pour le code que vous avez fourni? Ce serait très utile si nous savons ce qui est passé dans votre méthode. – don

+1

comme vous développez une bibliothèque, cela signifie qu'il doit y avoir un appel fait à partir de l'application elle-même à votre bibliothèque n'est-ce pas? Pourquoi ne pas simplement accepter un objet Context comme paramètre de votre fonction et qui devrait résoudre tous vos problèmes? –

+0

vous avez raison - c'est plutôt un héritage dans le design: je n'ai pas demandé de contexte auparavant, il serait donc gênant dans une nouvelle version non majeure de demander soudainement un contexte. –

Répondre

4
new Handler(context.getMainLooper()).post(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
    } 
}); 
+0

sympa! J'ai oublié les gestionnaires. Savez-vous comment cela fonctionnerait avec l'ouverture d'une boîte de dialogue si? que 'context' vous avez fourni est probablement' getApplicationContext() ', qui dans mon code est disponible via une vue. La raison pour laquelle j'ai fait 'new Activity()' est que je peux faire plus tard '... = new AlertDialog.Builder (new Activity());' –

+0

Désolé, je ne peux pas dire: ce serait plus rapide pour vous de courir le code. En fait, si vous avez une instance View, vous pouvez exécuter le code sur le thread UI en utilisant la méthode de View "post". –

1

L'activité est gérée par Android OS et ne doit pas être utilisé de cette façon, Pour ce faire, cela signifierait rompre le contrat de l'API, alors ne vous attendez pas à ce qu'il se comporte correctement.

Si vous souhaitez afficher une boîte de dialogue, créez simplement une activité avec un arrière-plan transparent, pour l'utilisateur, ce serait la même chose qu'une seule boîte de dialogue flottant au-dessus d'un autre écran.

+0

en quelque sorte. bonne suggestion, mais cela mettrait aussi leur activité en arrière-plan, alors qu'ils ne s'attendaient peut-être pas à un événement onPause –

+1

Toute bonne application Android devrait s'attendre à onPause à un moment donné;) – Kai

+0

je suis entièrement d'accord, et si j'étais la construction de l'application, je voudrais en rendre compte. mais cette fois-ci, je construis une bibliothèque et je ne peux rien supposer: '( –

Questions connexes