Android 在惰性适配器和listview中加载更多项

Android 在惰性适配器和listview中加载更多项,android,listview,adapter,Android,Listview,Adapter,我将在列表视图中加载更多数据。我可以加载更多数据,但它将删除以前的数据 我应该如何在列表视图中追加数据 以下是我的源代码: MainActivity类中的OnCreate方法 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recentposts); lv = (ListView) findVi

我将在列表视图中加载更多数据。我可以加载更多数据,但它将删除以前的数据

我应该如何在列表视图中追加数据

以下是我的源代码:

MainActivity类中的OnCreate方法

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recentposts);

    lv = (ListView) findViewById(R.id.list);

    //LoadContent();

    lv.setOnScrollListener(new OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {

           final int lastItem = firstVisibleItem + visibleItemCount;
           if (chkLoad == true) {
               if(lastItem == totalItemCount) {
                   chkLoad = false;
                   LoadContent();
               }
           }
        }
    });

}
public boolean GetLatestPosts(ListView lv, Activity a) {
    AsyncLatestPostTaskCompleteListener<String> mycb = new AsyncLatestPostTaskCompleteListener<String>();
    final CallLatestPost task = new CallLatestPost(counter,a,mycb,lv);
    task.execute("executer");

    return true;
}
MainActivity方法中的LoadContent()方法:

public void LoadContent(){
    lv = (ListView) findViewById(R.id.list);

    Post p = new Post(theCounter);
    theCounter+=20;
    if (p.GetLatestPosts(lv,MainActivity.this))
    {
        //"true"
    }

}
Post类中的GetLatestPosts方法

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recentposts);

    lv = (ListView) findViewById(R.id.list);

    //LoadContent();

    lv.setOnScrollListener(new OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {

           final int lastItem = firstVisibleItem + visibleItemCount;
           if (chkLoad == true) {
               if(lastItem == totalItemCount) {
                   chkLoad = false;
                   LoadContent();
               }
           }
        }
    });

}
public boolean GetLatestPosts(ListView lv, Activity a) {
    AsyncLatestPostTaskCompleteListener<String> mycb = new AsyncLatestPostTaskCompleteListener<String>();
    final CallLatestPost task = new CallLatestPost(counter,a,mycb,lv);
    task.execute("executer");

    return true;
}
public boolean GetLatestPosts(ListView lv,活动a){
AsyncLatestPostTaskCompleteListener mycb=新的AsyncLatestPostTaskCompleteListener();
最终CallLatestPost任务=新的CallLatestPost(计数器、a、mycb、lv);
任务。执行(“执行者”);
返回true;
}
AsyncLatestPostTaskCompleteListener(),我将在Asynctask完成后调用。

public class AsyncLatestPostTaskCompleteListener<T> {
    private PostAdapter adapter; 
    public void onTaskComplete(String result,ListView _list, Activity _activity) {
        String tmpStr = result;
        JSONArray ja_arr = null;
        try {

            if (tmpStr != "ERROR") {
                ja_arr = new JSONArray(tmpStr);
                JSONObject jo = null;

                HashMap<String, String> map = new HashMap<String, String>();


                for (int i=0; i < ja_arr.length(); i++){
                    jo = ja_arr.getJSONObject(i);
                    map = new HashMap<String, String>();
                    map.put("name", jo.getString("name"));
                    map.put("postid", jo.getString("IdPost"));
                    map.put("title", jo.getString("Title"));
                    map.put("date", jo.getString("Date"));
                    map.put("photo", jo.getString("photo"));
                    map.put("url", jo.getString("linkurl"));
                    map.put("desc", jo.getString("Description"));
                    jo.getString("Title") != null){
                        PostList.add(map); 

                }

                adapter = new PostAdapter(_activity, PostList);
                adapter.notifyDataSetChanged(); 

                if ( pa == null ) {
                    pa = adapter;
                } else {
                    // I Think, I shoud update Adapter Here...! 
                }

                pa.notifyDataSetChanged();

                _list.setAdapter(pa);




            } else {

                // ERROR
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.i("@@@==ERR", e.toString());
        }
    }
}
公共类AsyncLatestPostTaskCompleteListener{
专用后适配器;
public void onTaskComplete(字符串结果、列表视图\u列表、活动\u活动){
字符串tmpStr=结果;
JSONArray ja_arr=null;
试一试{
如果(tmpStr!=“错误”){
ja_arr=新的JSONArray(tmpStr);
JSONObject jo=null;
HashMap=newHashMap();
对于(int i=0;i

那么,我该如何解决我的问题。

我不知道您在哪里实例化“pa”,但问题是您每次都创建一个新适配器,然后覆盖“pa”。您需要将逻辑从以下位置向上移动:

adapter = new PostAdapter(_activity, PostList);
            adapter.notifyDataSetChanged(); 

            if ( pa == null ) {
                pa = adapter;
            } else {
                // I Think, I shoud update Adapter Here...! 
            }

            pa.notifyDataSetChanged();

            _list.setAdapter(pa);


不要每次都创建新适配器,请将新项目添加到现有适配器。在
adapter=new PostAdapter(_activity,PostList);
行,我创建了LazyAdapter,但我将类更改为PostAdapter。请告诉我如何添加新项目而不是创建新的LazyAdapter,好吗?