2012-08-30 54 views
1

在我的程序中,我從json URL檢索值,然後將它們顯示在listView中。現在我想從列表中刪除一些項目,所以當我單擊一個項目時,刪除API調用AsyncTask的doInBackground()。現在完成AsyncTask後,我想重新加載列表,以便可以看到更改。如何從Android中的AsyncTask刷新活動

我怎樣才能relaod列表中看到的變化..

我的AsyncTask是一個單獨的類。

這是我的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(); 
} 

我活動的名稱爲MyTop5.class,我想重裝當我點擊AlertDialog的OK鍵..

這是對我的coading 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); 

在此先感謝..

回答

0

我通常將Activity作爲參數傳遞給AsyncTask,並在完成工作時使用它來調用活動的公共方法。例如,它可以通過構造函數傳入。然後,我將執行列表中所需的更改,然後您必須記得在適配器上調用notifyDataSetChanged()(如果您將它用作ListView)。

+0

我還將活動作爲參數以及上下文傳遞給AsyncTask。但我現在能夠找到notifyDataSetChanged()。我的AsyncTask類的名稱是LoadingScreen,所以我寫的代碼是LoadingScreen.this.activity.notifyAll()並獲得了強制關閉消息。我只收到notify()或notifyAll()。我怎麼能得到notifyDataSetChanged(); –

+0

notifyDataSetChanged()是適配器上的方法,而不是活動。也許你可以通過適配器而不是傳遞活動?適配器有權訪問列表,以便您可以更改該列表,並在完成後可以對adapter.notifyDataSetChanged()進行更改。注意,不要更改列表指向的位置,否則會從適配器中刪除它的連接。 – span

+0

你可以請我提供一些示例代碼...因爲我仍然無法在同一個類中調用notifyDataSetChanged(),我已經爲我的ListView創建了適配器。當我使用以下代碼時,我得到了相同的notify()和notifyAll():adapter.notify ...()。 –

0

你可以試試這個

adapter.notifyDataSetChanged(); 

,使適配器上的觀察員發言。

+0

我現在能夠找到notifyDataSetChanged()。我的AsyncTask類的名稱是LoadingScreen,所以我寫的代碼是LoadingScreen.this.activity.notifyAll()並獲得了強制關閉消息。我只收到notify()或notifyAll()。我怎麼能得到notifyDataSetChanged(); –

+0

您必須在ListView的適配器類的實例上搜索該方法。 – theZiki