2015-10-27 2 views
1

Это таймер, чтобы обновить список, чтобы проверить любую новую запись в sqlite. и всякий раз, когда таймер переходит, он снова и снова обновляет список. В этом случае я хочу, чтобы таймер не влиял на список. Он должен добавить новую запись в конец, не прокручивая ее снова.обновить список просмотров таймером без прокрутки?

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)); 


     } 
+0

Похоже, вы установили новый адаптер в конце 'get_chat_data();' функцию. Это потеряло бы статус прокрутки списка/ресайзера. Итак, получите ссылку на оригинальный адаптер и попробуйте добавить к нему новые данные. –

+0

Возможный дубликат [Listview Прокрутка до конца списка после обновления списка] (http://stackoverflow.com/questions/3606530/listview-scroll-to-the-end-of-the-list-after-updating -the-list) –

ответ

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

} 
+0

Могу ли я спросить вас, где я должен положить этот код im, неспособный заставить его работать @SweetWisher –

+0

Вам нужно поместить его в метод 'get_chat_data' вместо строки' list.setAdapter (новый Custom_Adapter_chat (это, s_chat1, r_chat1, spic1, rpic1, mtime1, mdate1)); ' –

+0

Проверьте обновленный код @DEEPAKMITTAL –