使用计时器刷新listview而不滚动?

时间:2015-10-27 04:49:18

标签: android sqlite listview chat custom-adapter

这是刷新列表视图以检查sqlite中的任何新条目的计时器。每当计时器结束时,它会一次又一次刷新列表视图。在这种情况下,我希望计时器应该对listview没有影响。它应该在最后添加新条目,而不是再次向下滚动。

Timer t = new Timer();
                    t.scheduleAtFixedRate(new TimerTask() {
                        @Override
                        public void run() {
                            runOnUiThread(new Runnable() {
                                public void run() {


                                    get_chat_data();

                                }
                            });
                        }
                    }, 500, 1000);

这是在计时器

中调用的函数
private void get_chat_data() {

      String fuid = getIntent().getExtras().getString("uid");
    HashMap<String, String> user = session.getUserDetails();
    String uid = user.get(SessionManager.KEY_UID);



            //  Fetching user details from sqlite
            db = new SQLiteHandler(getApplicationContext());
            /*
            *
            * sender chat
            *
            * */

            HashMap<String, String> user_info = db.CHAT_DATA_IN_LIST_VIEW(fuid, uid);

            String s_chat= user_info.get("s_chat");
            String mtime= user_info.get("mtime");
            String mdate= user_info.get("mdate");
            String spic= user_info.get("s_pic");


            String []  s_chat1 = s_chat.split(":");
            String []  mtime1 = mtime.split("=");
            String []  mdate1 = mdate.split(":");
            String []  spic1 = spic.split(":");


            /**
             *
             * reciver chat
             *
             * */

            HashMap<String, String> user_info1 = db.CHAT_DATA_IN_LIST_VIEW1(fuid, uid);
            String r_chat= user_info1.get("r_chat");
            String rpic= user_info1.get("r_pic");
            String friendid= user_info1.get("com_id");

            String []  r_chat1 = r_chat.split(":");
            String []  rpic1 = rpic.split(":");






            list.setAdapter(new Custom_Adapter_chat(this, s_chat1, r_chat1, spic1, rpic1, mtime1, mdate1));


        }

1 个答案:

答案 0 :(得分:1)

首先,你一次又一次地呼叫setAdapter会犯错误。您只需要调用notifyDataSetChanged()来刷新列表中的数据。 它也将定位。

你应该这样做:

private void get_chat_data() {

       // your code to fetch records to fill in the array

      if(adapter==null)
      {
            adapter= new Custom_Adapter_chat(this, s_chat1, r_chat1, spic1, rpic1, mtime1, mdate1);
            list.setAdapter(adapter);
      }
      else
      {
           adapter.updateData(myNewData); //update your adapter's data
           adapter.notifyDatasetChanged();
      }

}