为什么要在listview中显示arraylist的最后价值?

时间:2012-05-21 04:08:17

标签: android

我已经启动了一个调用getMessage webservice的计时器,它返回该用户的提交消息arraylist size总是显示正确的消息数,但是当在该消息的列表视图中显示时,只显示由web服务发送的最后消息我使用此代码

public void handleMessage(Message msg) 
    {
        super.handleMessage(msg);

        if(msg.arg1!=RECIEVEFAILURE)
           {
            objrReceiveMessageSiteList =(ArrayList<ReceiveMessageSiteList>)msg.obj;
            System.out.println("objrReceiveMessageSiteList.get(0)"+objrReceiveMessageSiteList.get(0).getMessageStatus());
            System.out.println("objrReceiveMessageSiteList.get(0)"+objrReceiveMessageSiteList.size());
            if(objrReceiveMessageSiteList.size()!=0 && !objrReceiveMessageSiteList.get(0).getMessageStatus().equalsIgnoreCase("No New Message"))
            {
                for(int i=0;i<objrReceiveMessageSiteList.size();i++)
                {
                    objkeyvaluepair.setMessage(objrReceiveMessageSiteList.get(i).getMessage());
                    objkeyvaluepair.setMessageType(objrReceiveMessageSiteList.get(i).getMessageType());
                    objkeyvaluepair.setTimeStamp(objrReceiveMessageSiteList.get(i).getTimeStamp());
                    objkeyvaluepair.setSenderFirstName(objrReceiveMessageSiteList.get(i).getSenderFirstName());
                    objkeyvaluepair.setSenderId(objrReceiveMessageSiteList.get(i).getSenderId());
                    objkeyvaluepair.setRecieverFirstName(objrReceiveMessageSiteList.get(i).getReceiverFirstName());
                    messagerecord.add(objkeyvaluepair);
                    System.out.println("MESSAGE SIZE"+messagerecord.size());
                    System.out.println("MESSAGE---------- findeee"+messagerecord.get(i).getMessage());

                }
                System.out.println("objrReceiveMessageSiteList.get(0)--------------"+objrReceiveMessageSiteList.get(0).getMessageStatus());
                message.setText(""+messagerecord.size());
            }
    }

    }
};

在这个for循环中,arraylist在syste.out.println中显示正确的消息。但是当在适配器集适配器中发送时采用正确的大小但在所有列表视图中只显示最后一条消息。请帮助我

2 个答案:

答案 0 :(得分:1)

通过嵌套的objkeyvaluepair循环,每次迭代都会向ArrayList添加相同的对象(for)。

在最里面的for循环中,您应该创建一个新的objkeyvaluepair对象,然后将此新对象添加到ArrayList

答案 1 :(得分:0)

将此方法更改为以下内容:

public void handleMessage(Message msg) 
    {
        super.handleMessage(msg);

        if(msg.arg1!=RECIEVEFAILURE)
           {
            objrReceiveMessageSiteList =(ArrayList<ReceiveMessageSiteList>)msg.obj;
            System.out.println("objrReceiveMessageSiteList.get(0)"+objrReceiveMessageSiteList.get(0).getMessageStatus());
            System.out.println("objrReceiveMessageSiteList.get(0)"+objrReceiveMessageSiteList.size());
            if(objrReceiveMessageSiteList.size()!=0 && !objrReceiveMessageSiteList.get(0).getMessageStatus().equalsIgnoreCase("No New Message"))
            {
                for(int i=0;i<objrReceiveMessageSiteList.size();i++)
                {
                    //Create Local object of the Objkeyvaluepair here, for example
                    //ObjectKeyValuePair objkeyvaluePair=new OjectKeyvaluePair();
                    objkeyvaluepair.setMessage(objrReceiveMessageSiteList.get(i).getMessage());
                    objkeyvaluepair.setMessageType(objrReceiveMessageSiteList.get(i).getMessageType());
                    objkeyvaluepair.setTimeStamp(objrReceiveMessageSiteList.get(i).getTimeStamp());
                    objkeyvaluepair.setSenderFirstName(objrReceiveMessageSiteList.get(i).getSenderFirstName());
                    objkeyvaluepair.setSenderId(objrReceiveMessageSiteList.get(i).getSenderId());
                    objkeyvaluepair.setRecieverFirstName(objrReceiveMessageSiteList.get(i).getReceiverFirstName());
                    messagerecord.add(objkeyvaluepair);
                    System.out.println("MESSAGE SIZE"+messagerecord.size());
                    System.out.println("MESSAGE---------- findeee"+messagerecord.get(i).getMessage());

                }
                System.out.println("objrReceiveMessageSiteList.get(0)--------------"+objrReceiveMessageSiteList.get(0).getMessageStatus());
                message.setText(""+messagerecord.size());
            }
    }

    }
};