2012-06-14 1 views
0

J'ai une préférence de dialogue avec un bouton dessus que je veux avoir une autre activité ouverte. Lorsque cette activité est terminée, je souhaite que la boîte de dialogue mette à jour une vue de texte (dans la boîte de dialogue) avec les informations collectées à partir de l'activité.startactivityforresult de dialogpreference (non activité)

En d'autres termes: écran Préférences -> Préférences de dialogue -> Dialogue -> Bouton événement de clic -> Activité

Je l'habitude d'avoir une activité normale appeler l'activité (activité -> Bouton cliquez sur -> Activité) afin que je puisse utiliser startactivityforresult, puis appeler ma fonction syncgui à partir de "onactivityresult". Malheureusement, la préférence Dialog n'est pas une activité, et ne peut donc utiliser que startactivity (à partir du contexte), pas startactivityforresult (à partir de l'activité).

Y a-t-il une autre façon de dire à mon dialogue que l'activité a commencé et qu'elle peut mettre à jour le textview? Voici les fonctions originales

Ancienne activité parent:

public void onClick(View v) { 
     if(v == mSimModeBrowse) { 
      Intent i = new Intent("com.shared.FileChooser"); 
      i.putExtra("com.shared.FileChooser.EXTRA_PATH", vsbPath); 
      i.putExtra("com.shared.FileChooser.EXTRA_EXTENSIONS", vsbExtensions); 
      startActivityForResult(i,0); 
     } 
    } 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(resultCode == RESULT_OK) { 
      final String file = data.getExtras().getString("com.shared.FileChooser.EXTRA_RESULT"); 
      mSimModePath.setText(file); 
     } 
    } 

de filechooser (activité enfant):

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     File f = new File(path + "/" + files.get(position)); 
     Intent i = new Intent(); 
     i.putExtra(EXTRA_RESULT,f.getAbsolutePath()); 
     setResult(RESULT_OK,i); 
     finish(); 
    } 

Répondre

0

Avez-vous essayé d'utiliser:

runOnUiThread(new Runnable() { 
    public void run() 
    { 
     Intent i = new Intent("com.shared.FileChooser"); 
     i.putExtra("com.shared.FileChooser.EXTRA_PATH", vsbPath); 
     i.putExtra("com.shared.FileChooser.EXTRA_EXTENSIONS", vsbExtensions); 

     startActivityForResult(i,0); 
    } 
}); 

dans votre OnClick Dialog un événement? Cela devrait provoquer l'exécution sur le thread UI de l'activité.

+0

Une boîte de dialogue n'est pas une activité, donc je ne peux pas non plus utiliser runOnUiThread. La même raison que je ne peux pas utiliser startactivityforresult. –

+0

Si votre boîte de dialogue est créée dans votre activité, vous devriez pouvoir l'utiliser. Mais puisque vous dites que vous ne pouvez pas, il semble que vous utilisiez une classe distincte pour votre boîte de dialogue, auquel cas, vous devez passer votre activité en tant que variable à votre classe de dialogue lors de la construction et appelez runOnUiThread par: IE. mActivity.runOnUiThread – Guardanis

+1

La boîte de dialogue est une préférence de dialogue, donc je ne peux pas changer le constructeur. En tout cas, j'ai fini par faire une fonction dans la préférence de dialogue que j'ai appelée depuis l'écran des préférences pour passer l'activité avec laquelle je dois travailler. Ce n'est pas une très bonne solution de contournement, mais cela fait le travail. Je marque votre réponse comme correcte puisque je devine que cela fonctionnerait pour d'autres personnes. –

Questions connexes