如果对象是不同的数据类型,如何在 ArrayAdapter 列表的开头添加对象?
How to add object at the beginning of the list in ArrayAdapter if the object is different data type?
我只是检查这个 SO link 在适配器顶部添加一个对象。
这是我发现要在适配器顶部添加对象的代码:
yourAdapter.insert(object, 0);
但在我的例子中,对象的数据类型与适配器的数据类型不同。所以我收到以下错误:
第一个参数类型错误。必填.......
所以我决定转换对象然后尝试插入:
adapter.insert((OneOnOneMessage)messageList, 0);
但运气不好,开始出现以下 运行 时间错误:
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.mics.models.OneOnOneMessage
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at com.mics.activities.SingleChatActivity.onClick(SingleChatActivity.java:283)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.view.View.performClick(View.java:4448)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.view.View$PerformClick.run(View.java:18461)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.os.Handler.handleCallback(Handler.java:733)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.os.Looper.loop(Looper.java:136)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5072)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at dalvik.system.NativeStart.main(Native Method)
我可以使用以下代码将对象添加到适配器中:
adapter.addAll(messageList);
使用上面的行我没有遇到任何关于 'wrong argument type'
或 'casting'
的问题,但我想在列表视图的顶部添加对象。
问题是您无法将 list(messageList) 转换为 OneOnOneMessage.[=11= 类型的对象]
您可以像这样投射列表中的单个项目:
adapter.insert((OneOnOneMessage)messageList.get(index), 0);
这是我的解决方案:
创建了新列表并将新消息提取到其中:
messageListLoad = OneOnOneMessage.loadEarlierMessages(sessionData.getId(), buddyId, messageList.get(0).getId(), LOAD_EARLIER_COUNT);
使用以下代码将新创建的列表加载到先前的列表中:
for (int i = messageListLoad.size() - 1; i >= 0; i--) {
messageList.add(0, messageListLoad.get(i));
}
最后告诉适配器我们在列表中有一些新值:
adapter.notifyDataSetChanged()
我只是检查这个 SO link 在适配器顶部添加一个对象。
这是我发现要在适配器顶部添加对象的代码:
yourAdapter.insert(object, 0);
但在我的例子中,对象的数据类型与适配器的数据类型不同。所以我收到以下错误:
第一个参数类型错误。必填.......
所以我决定转换对象然后尝试插入:
adapter.insert((OneOnOneMessage)messageList, 0);
但运气不好,开始出现以下 运行 时间错误:
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.mics.models.OneOnOneMessage
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at com.mics.activities.SingleChatActivity.onClick(SingleChatActivity.java:283)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.view.View.performClick(View.java:4448)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.view.View$PerformClick.run(View.java:18461)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.os.Handler.handleCallback(Handler.java:733)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.os.Looper.loop(Looper.java:136)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5072)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
03-08 14:55:43.933 6358-6358/com.dayoptions.chat W/System.err: at dalvik.system.NativeStart.main(Native Method)
我可以使用以下代码将对象添加到适配器中:
adapter.addAll(messageList);
使用上面的行我没有遇到任何关于 'wrong argument type'
或 'casting'
的问题,但我想在列表视图的顶部添加对象。
问题是您无法将 list(messageList) 转换为 OneOnOneMessage.[=11= 类型的对象]
您可以像这样投射列表中的单个项目:
adapter.insert((OneOnOneMessage)messageList.get(index), 0);
这是我的解决方案:
创建了新列表并将新消息提取到其中:
messageListLoad = OneOnOneMessage.loadEarlierMessages(sessionData.getId(), buddyId, messageList.get(0).getId(), LOAD_EARLIER_COUNT);
使用以下代码将新创建的列表加载到先前的列表中:
for (int i = messageListLoad.size() - 1; i >= 0; i--) {
messageList.add(0, messageListLoad.get(i));
}
最后告诉适配器我们在列表中有一些新值:
adapter.notifyDataSetChanged()