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

ユーザーがボタンをクリックすることに基づいて上記のコードを実装しました。カウント値はサービスに送信され、サービスから最新のものを取得します。servieから最新のリストを取得すると、そのリストはリストビューに追加されます。

上記のコードから私は最新のものだけを取得することができます以前は削除しています。

上記の場合、リストビューに最新のデータ(リスト)を追加するにはどうすればよいですか?

どんな体でも助けてください…。

4

4 に答える 4

3

新しいメッセージを受け取るたびに新しいカスタムアダプタを作成しているため、これが発生していると思います。この行で

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

これを行わず、adapter.add(Newmessage);を使用してみてください。配列リストを使用して作業を簡単にすることができます

わかりました。そのために、カスタムアダプタクラスに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();
}
于 2012-03-07T05:09:39.670 に答える
3
    CustomeAdapter adapter = new CustomeAdapter(GetMsgsScreen.this,newmsgResult);

このアダプタをnewmsgResultクラスの最上位で定義します。クラス内のローカル変数ではありません。

newmsgResultこれで、リストビューのデータを更新するときはいつでも、の値/データを更新して、adapter.notifyDataSetChanged()

于 2012-03-08T07:10:50.323 に答える
1

最初に、resultを使用して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 に答える