【发布时间】:2014-05-29 19:24:44
【问题描述】:
我知道这个问题已经被问过很多次了,甚至我已经解决了很多次这个问题,但不知何故,我在这一点上感到非常震惊,无论如何我都无法让它工作,我试着去做。请大家看看这个
我正在使用 SignalR framework 在 Android 和 .NET 中创建一个聊天应用,我已经成功地在 Android 的模型级别实现了这一点,但是视图变得很奇怪。
- SignalR Server 在这里是C# based console App。
- SignalR Client 基于 Android。
组件:
Message_Activity:
has_Method_To_Send_Message_To_SignalR_Server()
static_Method_To_Render_The_Message_Received_From_Custom_Api_Class()
Custom_Api_Class(非活动):
method_invoked_From_SignalR_Server_To_Pass_Message_&_Then_Pass_To_Message_Rendering_Method_In_Message_Activity()
流程:
- 消息通过网络从 Message_Activity 到 Console C# SignalR server 发送。
- Server send 将此消息发送给目标客户端,方法是将remote call 调用到Custom_Api_Class 中存在的方法。
- 然后此方法将该消息传递给 Message_Activityfor display in theListView 中的static Message Rendering Method。
问题:
- 在从Custom_Api_Class 接收到Message_Activity 类以在ListView 上显示消息后,它不会显示... 直到除非 ListView 正在向上或向下滚动。
结论:
- 我知道这是ListView 没有刷新的问题,我确实尝试了以下方法来解决它,但都是徒劳的......
-在ArrayAdapter上调用notifyDataSetChanged
- 在ListView 上调用invalidateViews。
- 尝试将值添加到 ArrayList<String> 中,该值进入 ArrayAdapter
- 尝试将值直接添加到ArrayAdapter。
- android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
谁能告诉我这里的核心问题是什么以及任何解决方案。如果有人可以帮助我解决这个问题,我将更加感激。
编辑:
SignalR Server 调用的 Custom_Api_Class(Non-Activity) 中的代码:
Subscription subs = hub.subscribe("receiveMessage");
subs.addReceivedHandler(new Action<JsonElement[]>() {
@Override
public void run(JsonElement[] obj) throws Exception {
MessageActivity.receiveText(obj[0].toString().replaceAll("\"","")+" "+obj[1].toString().replaceAll("\"",""));
}
});
Custom_Api_Class 调用的 Message_Activity 中的代码:
public static void receiveText(String msgFromUser) {
mAdapter.add(msgFromUser);
listView_Message.post(new Runnable() {
@Override
public void run() {
// Select the last row so it will scroll into view...
listView_Message.setSelection(mAdapter.getCount() - 1);
}
});
mAdapter.notifyDataSetChanged();
}
【问题讨论】:
-
将添加项目的代码发布到列表视图
标签: java android listview signalr android-arrayadapter