这是刷新列表视图以检查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));
}
答案 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();
}
}