每两分钟刷新一次列表视图



我试图每两秒刷新一次ListView。 执行第一个loadingTask,适配器从 arraylist 聊天填充列表视图。然后每两秒调用并执行一次refreshAdapterLoadingTask作为连续循环,并再次填充 arraylist 聊天。我需要从ArrayList中删除以前的项目并仅保留新项目。请了解如何实现这种道路功能的最后一个想法。目前,My 数组不断填充来自以前的 httpcall 的项目作为循环。

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();
}
// 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();
}

尝试以下代码

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

并在执行后调用相同的方法

希望这对你有帮助

最新更新