2016-02-16 41 views
1

我使用BaseAdapter在listview中創建了一個廣告列表,我想從列表中刪除單個廣告。要刪除單個廣告,我必須使用異步任務請求Web api,所以我在onPostExecute方法中添加了notifyDataSetChanged()。廣告已成功刪除,但notifydatasetchnaged無法運行.my定製BaseAdapter類如下,請幫助解決此問題。notifyDataSetChanged在BaseAdapter類中的AsyncTask中不起作用

public class AdsListAdapter extends BaseAdapter{ 

     private Activity activity; 
     ArrayList<String> title; 
     ArrayList<Long> adsIds; 
     SessionManager sessions;   
     AlertDialogManager alert = new AlertDialogManager(); 
     private static LayoutInflater inflater=null;  
     String MYTAG="AdLIst"; 

     long userID=0; 


     public AdsListAdapter(Activity a,ArrayList<String> titlelist,ArrayList<Long> adsId,long userid) { 
      activity = a;   
      title=titlelist;   
      adsIds=adsId;   
      userID=userid; 
      inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      sessions=new SessionManager(activity.getApplicationContext()); 
      imageLoader = new ImageLoader(activity.getApplicationContext()); 
     } 


     public int getCount() { 
      return title.size(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 


     public static class ViewHolder{ 
      public TextView titles,editicon,delicon; 


     } 

     @SuppressLint("NewApi") public View getView(int position, View convertView, ViewGroup parent) { 
      final int id=position; 
      View vi=convertView; 
      ViewHolder holder; 
      if(convertView==null){ 
       vi = inflater.inflate(R.layout.adscustomlist, null); 
       holder = new ViewHolder(); 
       holder.titles = (TextView) vi.findViewById(R.id.titles); 
       holder.editicon= (TextView) vi.findViewById(R.id.editicon);    
       holder.delicon= (TextView) vi.findViewById(R.id.delicon); 
       vi.setTag(holder); 
      } 
      else 
      { holder=(ViewHolder)vi.getTag(); } 
      holder.titles.setText(title.get(position)); 
       holder.delicon.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) {       
          new DeleteAd(userID,adsIds.get(id)).execute(); 
         } 
        }); 


      return vi; 
     } 




     class DeleteAd extends AsyncTask<String,Void,Void> 
     { 
      AlertDialogManager alert = new AlertDialogManager(); 
       private String Error = null,Message=null; 
        long UserID =0,AdId=0; 
        boolean Status=false; 

       private ProgressDialog Dialog = new ProgressDialog(activity);   

       protected void onPreExecute() {     
         Dialog.setMessage("Loading ..."); 
         Dialog.setCanceledOnTouchOutside(false); 
         Dialog.show(); 

        } 

        public DeleteAd(long UserID,long AdId) { 
         this.UserID=UserID; 
         this.AdId=AdId; 

        } 


      @Override 
      protected Void doInBackground(String... arg0) { 
       JSONObject json;     
       try { 
        json = new JSONObject(postDataAdDelete()); 
        Message=json.getString("Message"); 
        Status = json.getBoolean("Status");     
       } catch (JSONException e) {     
        e.printStackTrace(); 
       } 
       return null; 
      } 
       protected void onPostExecute(Void unused) { 
        Dialog.dismiss(); 
        alert.showAlertDialog(activity, "Ad Delete", Message, Status); 
        notifyDataSetChanged(); 

      } 
     } 




} 

回答

0

您必須刪除列表標題中要刪除的位置的值。嘗試title.remove(位置)

+0

謝謝@One一個 – austin

0
AdsListAdapter adapter = new AdsListAdapter (Activity ,ArrayList<String> ,ArrayList<Long> ,long);//pass the value 
adapter.notifyDataSetChanged(); 
0

嘗試調用notifyDataSetChanged()方法這樣

activity.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
         notifyDataSetChanged(); 
       } 
      }); 
相關問題