如何将最新数据附加到Android自定义BaseAdapter的ListView中?

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个回答

3
我认为问题出在您每次获取新消息时都创建了一个新的自定义适配器... 在这一行代码中。
CustomeAdapter adapter = new CustomeAdapter(GetMsgsScreen.this,newmsgResult);

不要这样做并尝试使用adapter.add(Newmessage);,你可以使用array list使工作更容易。
好的.. 你的自定义适配器类中应该有一个add函数来实现这个功能.. 你可以通过将以下内容添加到你的自定义适配器类中来实现。
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();
}

我无法获取add()方法。 - prasad.gai
你可以贴上你的适配器类吗? - 5hssba

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

请在类的顶部定义此适配器和newmsgResult,而不是在类内部定义为局部变量。

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


1

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

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

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

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

然后只需使用adapter.notifyDataSetChanged();


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接