2014-04-07 260 views
0

我試圖每隔兩秒刷新我的ListView。第一個loadingTask被執行,並且適配器從arraylist聊天中填充ListView。然後每兩秒鐘調用refreshAdapterLoadingTask並作爲連續循環執行並再次填充數組列表聊天。我需要從ArrayList中刪除以前的項目,並僅保留新項目。任何關於如何實現道路功能最後的想法都可以實施。目前,我的數組不斷填充來自先前httpcall的項目作爲循環。每兩分鐘刷新一次listview android

int refreshInterval =2000; //set refresh interval 

class loadingTask extends AsyncTask<Void, Void,Void> { 

//arraylist 
    chat = new ArrayList<Chat>(); 


    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 



    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     ... 

       for (int i=0;i<room_length;i++){ 
       JSONObject obj_value = responseArray.getJSONObject(i); 

       if (obj_value.has("@id")) 
        id=obj_value.getString("@id"); 

       if (obj_value.has("@version")) 
        version=obj_value.getString("@version"); 

     ... 


      chatAdapter = new ChatAdapter(m,chat); 
      msgList.setAdapter(chatAdapter); //set data to listview 
      chatAdapter.notifyDataSetChanged();//update changes 
      msgList.setSelection(msgList.getAdapter().getCount()-1); 


      handler.postDelayed(refreshView, refreshInterval); 


    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 



     return null; 
    } 




     public static class refreshAdapterLoadingTask extends AsyncTask<Void, Void,Void> { 

    private String isMarketingMessage; 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 

     //if(chat!=null) 
      //chat.clear(); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     try { 
      ... 

      for (int i=0;i< responseArray.length();i++){ 
       JSONObject obj_value = responseArray.getJSONObject(i); 

       if (obj_value.has("@id")) 
        id=obj_value.getString("@id"); 

       if (obj_value.has("@version")) 
        version=obj_value.getString("@version"); 

       if (obj_value.has("@content")) 
        content=obj_value.getString("@content"); 

       if (obj_value.has("@sentDate")) 
        sentDate=obj_value.getString("@sentDate"); 

       if (obj_value.has("player")) 
        player=obj_value.getString("player"); 

       chat.add(new Chat(isMarketingMessage, id, version,content, sentDate, player)); 


      } 


     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



     //remove previous arraylist values 
    // for (int i=0;i<previousArrayListSize;i++){ 
     // chat.remove(i); 
     //} 



     handler.postDelayed(refreshView, refreshInterval); 

     chatAdapter = new ChatAdapter(m,chat); 
     chatAdapter.notifyDataSetChanged(); 


    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     return null; 
    } 
} 



} 

更新

public static void process() { 

    new Thread(new Runnable() { 

     public void run() { 
      try { 
       // LiveScoredata(); 
       new refreshAdapterLoadingTask().execute(); 

      } catch (Exception e) { 

      } 

      m.runOnUiThread(new Runnable() { 

       public void run() { 
        try { 

         if (chat!=null) 
          chat.clear(); 

         //your list fill hear 
         chatAdapter.notifyDataSetChanged(); 

        } catch (Exception e) { 

        } 
       } 
      }); 
     } 

    }).start(); 

} 

回答

1

嘗試下面的代碼

new Handler().postDelayed(new Runnable() { 
     @Override 
     //automatically disappear after given time and start game 
     public void run() { 
      //call your loadingTask here 
     } 
    }, refreshInterval); 

並調用後同樣的方法執行

希望這將幫助你

+0

我需要刪除ArrayList中預先設定的項目只有不通知用戶的ArrayList是明確 – Dimitri

3
// Using Timer and Runnable method you can list refresh 

Timer t = new Timer(); 
t.scheduleAtFixedRate(new TimerTask() { 

    @Override 
    public void run() { 
        // your process 
     process(); 
    } 

}, 0, 2000); 

// Process method 
private void process() { 

    new Thread(new Runnable() { 

     public void run() { 
      try { 
       // LiveScoredata(); 
      } catch (Exception e) { 

      } 
      runOnUiThread(new Runnable() { 

       public void run() { 
        try { 
         //your list fill hear 
         adapter.notifyDataSetChanged(); 

        } catch (Exception e) { 

        } 
       } 
      }); 
     } 

    }).start(); 

} 
+0

哪裏來清除數組列表 – Dimitri

+0

以上適配器notifydatasetchanged明確ArrayList和填充的ArrayList –

+0

檢查更新,我把你的代碼你告訴我做的,但如果我清除聊天arraylist所有記錄將在更新之前消失 – Dimitri

相關問題