3

我已经使用自定义基础适配器实现了一个应用程序,用于在列表视图中显示数据。在我的应用程序中,我使用自定义基础适配器向列表视图显示了一些内容,这些内容将来自 Web 服务。我使用了一个按钮来获取最新数据来自服务。当我从服务获取最新数据时,我想将最新数据附加到底部的列表视图,而不删除列表视图中的先前数据。

我已按如下方式实现了我的应用程序:

  result = new ParseXml().convertMessages(new Model().getMessages("0"));
           count = Integer.parseInt(result.get(0).getMessageID());
           ((Button)findViewById(R.id.oldMessagesButton)).setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                fetchNewMessages();

                }
            }); 



  protected void fetchOldMessages() {
    // TODO Auto-generated method stub
    waitProgreess = ProgressDialog.show(this, "Please wait", "Loading...");
    new Thread() {
        public void run() {
            try {

                Thread.sleep(800);
                } catch (InterruptedException e) {
                }
                newmessageHandler.sendEmptyMessage(0);
        }
    }.start();
}


  private Handler newmessageHandler = new Handler() {

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

        Log.v("000000", "count :"+count);
        if(count>0){
        newmsgResult = new ParseXml().convertMessages(new Model().getNewMessages(""+count));

        CustomeAdapter adapter = new CustomeAdapter(GetMsgsScreen.this,newmsgResult);
        lst.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        count=Integer.parseInt(newmsgResult.get(oldmsgResult.size()-1).getMessageID());
    }
        waitProgreess.dismiss();
    }
};

我已经实现了基于用户单击按钮计数值将被发送到服务然后从服务获取最新的上述代码。当我从服务获取最新列表时,该列表希望追加到列表视图。

从上面的代码中,我只能得到最新的前一个正在删除。

在上述情况下,如何将最新数据(列表)附加到列表视图?

请任何人帮助我....

4

4 回答 4

3
    CustomeAdapter adapter = new CustomeAdapter(GetMsgsScreen.this,newmsgResult);

定义这个适配器并newmsgResult在你的类的顶部..不是类内的局部变量..

现在,每当您要更新列表视图中的数据时,请更新其中的值/数据newmsgResult并调用adapter.notifyDataSetChanged()

于 2012-03-08T07:10:50.323 回答
3

我认为它正在发生,因为您每次收到新消息时都在创建一个新的自定义适配器.. 在这一行

CustomeAdapter adapter = new CustomeAdapter(GetMsgsScreen.this,newmsgResult);

不要这样做并尝试使用 adapter.add(Newmessage); 您可以使用数组列表使工作更轻松

好的..你应该在你的自定义适配器类中有一个添加函数..你可以通过将它添加到你的自定义适配器类来做到这一点

private void customadd(String newmsg)
{
  //ArrayList<String> msg=new List<String>; create this array list as a source to your adapter
  msg.add(newmsg);
adapter.notifyDataSetChanged();
}
于 2012-03-07T05:09:39.670 回答
1

最初使用结果使用 customAdapter 加载您的列表视图(假设结果是 arraylist)

   CustomeAdapter adapter = new CustomeAdapter(GetMsgsScreen.this,result);
    lst.setAdapter(adapter);

一旦有了新值,就无需创建新结果和适配器对象,只需将结果附加到适配器对象中,

result.add("append your new result");

然后简单地adapter.notifyDataSetChanged();

于 2012-03-08T07:03:42.737 回答
-1

不要创建新的适配器。保留原始数据并将新数据传递给它以进行附加。

于 2012-03-07T05:05:05.477 回答