我正在制作聊天应用程序,每条消息都有2个参数:消息文本和发送消息的时间,我每秒重绘这两个参数。
single_message.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
//每1秒做一次 MyJavaClass.java
messagesList = new ArrayList<HashMap<String, String>>();
... sending parameters to database and fetch messages
messages = json.getJSONArray("messages");
for (int i = 0; i < messages.length(); i++) {
JSONObject object = messages.getJSONObject(i);
message= object.getString("message");
time= object.getString("time");
HashMap<String, String> messagesMap = new HashMap<String, String>();
messagesMap.put("message", message);
messagesMap.put("time", time);
messagesList.add(messagesMap);
}
runOnUiThread(new Runnable() {
public void run() {
final ListAdapter adapter = new SimpleAdapter(
MyJavaClass.this, messagesList,
R.layout.single_message, new String[]{"message", "time"}, new int[]{R.id.message, R.id.time});
getListView().post(new Runnable() {
@Override
public void run() {
getListView().setSelection(adapter.getCount() - 1);
}
});
setListAdapter(adapter);
}
});
如果没有新消息,我怎样才能重绘时间并保留该消息?注意:用户可以随时删除每条消息。
我也有滚动问题。由于每一秒我重绘聊天和位置到最后添加的消息,我无法正常滚动,它总是返回我最新添加的消息,我不能正常查看旧消息。 我需要
getListView().post(new Runnable() {
@Override
public void run() {
getListView().setSelection(adapter.getCount() - 1);
}
});
因为这是定位到最新添加消息的唯一方法。最新添加的消息位于屏幕底部,与其他聊天应用程序一样。
我也有闪烁问题。这可能是因为我每秒重绘一次聊天。我该如何消除闪烁?
答案 0 :(得分:0)
尝试使用ViewHolder模式(这里有一个解释:http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html),您可以重复使用视图而无需重新绘制视图,并且只在必要时填充它们