2013-07-25 63 views
0

我正在使用CustomAdapter,它延伸了BaseAdapterAsynccTask以顯示ListView中的結果。一切正常,但我想每10分鐘刷新一次新項目,所以我把AsyncTask放在TimeTask之內。問題是listview不是刪除它的舊項目,而是將舊項目添加到新項目中。我使用notifyDataSetChanged()和我在互聯網上找到的所有東西,但沒有任何反應。這是我嘗試代碼:我的ListView正在更新但不刪除以前的項目

public class Twitter7FeedActivity extends Activity { 

    LazyAdapter adapter; 
    ListView list; 

    JSONObject jsonObj = null; 
    JSONArray jsonArray = null; 
    ArrayList<HashMap<String, String>> tweets = new ArrayList<HashMap<String, String>>(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_twitter7_feed); 
     callAsynchronousTask(); 
    } 

    public void callAsynchronousTask() { 
     final Handler handler = new Handler(); 
     Timer timer = new Timer(); 
     TimerTask doAsynchronousTask = new TimerTask() { 
      @Override 
      public void run() { 
       handler.post(new Runnable() { 
        public void run() { 
         try { 
          new GetFeedTask().execute(CommonUtils.BEARER_TOKEN, 
            CommonUtils.URL); 
         } catch (Exception e) { 
         } 
        } 
       }); 
      } 
     }; 
     timer.schedule(doAsynchronousTask, 0, 30000); 
    } 

    protected class GetFeedTask extends AsyncTask<String, Void, String> { 


     @Override 
     protected String doInBackground(String... params) { 
       //related code 
     } 

     @Override 
     protected void onPostExecute(String jsonText) { 

      // My Json parsing related code 

      list = (ListView) findViewById(R.id.list); 
      adapter = new LazyAdapter(Twitter7FeedActivity.this, tweets); 
      list.setAdapter(adapter); 
      //adapter.notifyDataSetChanged(); 
      ((LazyAdapter) list.getAdapter()).notifyDataSetChanged(); 
     } 
    } 
} 

這是我LazyAdapter類:

public class LazyAdapter extends BaseAdapter { 

    private Activity activity; 
    private ArrayList<HashMap<String, String>> data; 
    private static LayoutInflater inflater = null; 
    public ImageLoader imageLoader; 

    public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
     activity = a; 
     data = d; 
     notifyDataSetChanged(); // I am also using it here 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader = new ImageLoader(activity.getApplicationContext()); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     if (convertView == null) 
      vi = inflater.inflate(R.layout.list_row, null); 
     TextView name = (TextView) vi.findViewById(R.id.name); 
     TextView tweet = (TextView) vi.findViewById(R.id.text); 
     TextView date = (TextView) vi.findViewById(R.id.created_at); 

     //related code 

     return vi; 
    } 
} 

再次運行的AsyncTask再次,列表視圖末追加新的項目後,但我需要完全刷新只有新項目的列表視圖。

回答

2

在將新項目放入ListView之前,首先需要清除ListView中已有的項目。

例如:

clearButton.setOnClickListener(new OnClickListener() 
    { 

     public void onClick(View arg0) 
     { 
      adapter.clear(); 
      adapter.notifyDataSetChanged(); 
     } 
    }); 
} 
+0

這是一個自定義適配器。 clear()函數的代碼應該是什麼? –

+0

public void clear(){ data.clear(); } – DarkBladeX

+0

我沒有按鈕。那麼我應該在哪裏清除數據? –

1

由於較少的聲譽我給你回答其他人也可以在評論中給出。

使用adapter.notifyDataSetChanged();當您完成後臺任務或更新數據。

+0

我已經設置了它(參見我的代碼)。但它在listview上追加新項目,而不是刪除前一個。 –

相關問題