如果对象是不同的数据类型,如何在ArrayAdapter的列表开头添加对象?

时间:2016-03-08 09:33:43

标签: android listview arraylist android-arrayadapter

我只需检查此SO链接,即可在适配器顶部添加一个对象。

以下是我发现在适配器顶部添加对象的代码:

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$2.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'的任何问题,但我想在列表视图的顶部添加该对象。

2 个答案:

答案 0 :(得分:1)

问题在于您无法将列表(messageList)强制转换为 OneOnOneMessage 类型的对象。

您可以从列表中投射单个项目,如下所示:

adapter.insert((OneOnOneMessage)messageList.get(index), 0);

答案 1 :(得分:0)

这是我的解决方案:

创建新的List并将新消息提取到此:

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