2012-08-30 6 views
1

Dans mon programme, je suis récupérer des valeurs d'une URL de JSON puis de les afficher dans un listView. Maintenant, je veux supprimer certains éléments de la liste, donc quand je clique sur un élément, l'API de suppression appelle dans le doInBackground() de AsyncTask .. Maintenant, après avoir terminé la AsyncTask je veux recharger la liste afin que les changements peuvent être vus.Comment rafraîchir l'activité de AsyncTask dans Android

Comment puis-je relaod la liste pour voir les changements ..

Mon AsyncTask est une catégorie distincte.

ceci est mon code AsyncTask:

protected String doInBackground(String... DATA) { 
    // TODO Auto-generated method stub 
    rqst_type = DATA[0]; 
    if(rqst_type.equals("del_top5")) 
    { 
     String url = DATA[1]; 
     JsonParser jParser = new JsonParser(); 
     JSONObject json = jParser.getJSONfromUrl(url+memberId); 
     Log.v(TAG_LOG, "del url: "+url+memberId); 
     try 
     { 
      message = json.getString(TAG_DELSCS); 
      Log.v(TAG_LOG, "msg "+TAG_DELSCS); 
     } 
     catch(JSONException e) 
     { 
      Log.v(TAG_LOG, String.valueOf(e)); 
     } 
    } 
    return null; 
} 


protected void onPostExecute(String result) { 
    // TODO Auto-generated method stub 
    super.onPostExecute(result); 
    if(rqst_type.equals("del_top5")) 
    { 
     if(message.equals("true")) 
     { 
      AlertDialog alertDialog = new AlertDialog.Builder(context).create(); 
      alertDialog.setTitle("Course Deleted"); 
      alertDialog.setMessage("Course Sucessfully Deleted"); 
      alertDialog.setIcon(R.drawable.tick); 
      alertDialog.setButton("OK", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int which) 
       { 

       } 
      }); 
      alertDialog.show(); 
     } 
     else if(message.equals("false")) 
     { 
      AlertDialog alertDialog = new AlertDialog.Builder(context).create(); 
      alertDialog.setTitle("Error"); 
      alertDialog.setMessage("Course Not Deleted"); 
      alertDialog.setIcon(R.drawable.alert); 
      alertDialog.setButton("OK", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int which) 
       { 

       } 
      }); 
      alertDialog.show(); 
     } 
     else 
     { 
      AlertDialog alertDialog = new AlertDialog.Builder(context).create(); 
      alertDialog.setTitle("Error"); 
      alertDialog.setMessage("Unknown Erroe Occured"); 
      alertDialog.setIcon(R.drawable.alert); 
      alertDialog.setButton("OK", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int which) 
       { 

       } 
      }); 
      alertDialog.show(); 
     } 
    } 
    progress.dismiss(); 
} 

Le nom de mon activité est MyTop5.class que je veux recharger lorsque je clique sur le bouton OK de la AlertDialog ..

c'est le coading pour mon ListAdapter:

ListAdapter adapter = new SimpleAdapter(this, LoadingScreen.top5List, R.layout.top5_list, 
      new String[] { TAG_GLFCRSNAME, TAG_GLFCRSID, TAG_CRTDATE, TAG_FCLTY, TAG_HOLES }, 
      new int[] { R.id.top_golfname, R.id.top_courseid, R.id.top_createdate, R.id.top_fclty, R.id.top_holes }); 
setListAdapter(adapter); 

Merci à l'avance ..

Répondre

0

Je passe généralement dans l'Activity en tant que paramètre de la tâche AsyncTask et l'utilise pour appeler une méthode publique sur l'activité lorsque le travail est terminé. Il peut être passé à travers le constructeur par exemple. J'effectuerais alors les changements nécessaires sur la liste et ensuite vous devez vous rappeler d'appeler notifyDataSetChanged() sur l'adaptateur si vous l'utilisez en tant que ListView.

+0

J'ai également passé l'activité en tant que paramètre avec le contexte de la tâche asynchrone. Mais je suis maintenant capable de trouver le notifyDataSetChanged(). Le nom de ma classe AsyncTask est LoadingScreen, donc le code que j'ai écrit était LoadingScreen.this.activity.notifyAll() et j'ai reçu un message de fermeture forcée. Je reçois seulement notify() ou notifyAll(). comment puis-je obtenir notifyDataSetChanged(); –

+0

notifyDataSetChanged() est une méthode sur l'adaptateur, pas sur l'activité. Au lieu de passer l'activité peut-être vous pouvez passer l'adaptateur? L'adaptateur a accès à la liste, alors vous pouvez changer cela et quand vous avez fini, vous pouvez adapter.notifyDataSetChanged(). Soyez prudent afin de ne pas modifier l'emplacement de votre liste, cela supprimera sa connexion de l'adaptateur. – span

+0

Pouvez-vous me fournir un exemple de code ... car je ne suis toujours pas capable d'appeler notifyDataSetChanged() dans la même classe où j'ai créé l'adaptateur pour ma ListView. J'obtiens la même notification() et notifyAll() quand je tyr le code suivant: adapter.notify ...(). –

0

Vous pouvez essayer cette

adapter.notifyDataSetChanged(); 

pour faire appel d'observateur sur l'adaptateur.

+0

Je suis maintenant capable de trouver notifyDataSetChanged(). Le nom de ma classe AsyncTask est LoadingScreen, donc le code que j'ai écrit était LoadingScreen.this.activity.notifyAll() et j'ai reçu un message de fermeture forcée. Je reçois seulement notify() ou notifyAll(). comment puis-je obtenir notifyDataSetChanged(); –

+0

Vous devez rechercher cette méthode sur l'instance de votre classe d'adaptateur pour ListView. – theZiki