Android ListView内数据的动态追加

android listview动态追加分页

设计思路

把置入适配器的list追加数据记录,再使用适配器的notifyDataSetChanged()刷新。

方法案例

以http://blog.csdn.net/jueblog/article/details/12114513的ListView为例,对Activity作如下改进。
[java][/java] view plaincopy

  1. package com.app.test01;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import org.json.JSONArray;
  6. import org.json.JSONException;
  7. import org.json.JSONObject;
  8. import android.R.integer;
  9. import android.app.Activity;
  10. import android.os.Bundle;
  11. import android.view.ContextMenu;
  12. import android.view.LayoutInflater;
  13. import android.view.MenuItem;
  14. import android.view.View;
  15. import android.view.ContextMenu.ContextMenuInfo;
  16. import android.widget.AbsListView;
  17. import android.widget.AbsListView.OnScrollListener;
  18. import android.widget.AdapterView;
  19. import android.widget.AdapterView.AdapterContextMenuInfo;
  20. import android.widget.BaseAdapter;
  21. import android.widget.ListView;
  22. import android.widget.TextView;
  23. import android.widget.Toast;
  24. import com.app.adapter.MyWeixinJSON;
  25. import com.app.adapter.MyWeixinList;
  26. /**
  27.  * 点击  追加数据的ListView
  28.  * @author 402-9
  29.  *
  30.  */
  31. public class ListViewPage extends Activity {
  32.     private ListView lv;
  33.     private BaseAdapter mJson;
  34.     private JSONArray mData = new JSONArray();// JSON数据源
  35.     private View view_page_footer;// 底部视图
  36.     private int num = 1;// 加载数据计数
  37.     private int count = 50;// 总数据
  38. //  private boolean flag;
  39.     @Override
  40.     protected void onCreate(Bundle savedInstanceState) {
  41.         // TODO Auto-generated method stub
  42.         super.onCreate(savedInstanceState);
  43.         setContentView(R.layout.weixin);
  44.         lv = (ListView) findViewById(R.id.lv);
  45.         getJSONArray(mData);
  46.         mJson = new MyWeixinJSON(mData, this);
  47.         view_page_footer = LayoutInflater.from(this).inflate(
  48.                 R.layout.view_page_footer, null);
  49.         lv.addFooterView(view_page_footer);// 添加底部视图
  50.         TextView text_page = (TextView) view_page_footer.findViewById(R.id.text_page);
  51.         text_page.setOnClickListener(new View.OnClickListener() {
  52.             // 点击按钮 追加数据 并通知适配器
  53.             @Override
  54.             public void onClick(View v) {
  55.                 // TODO Auto-generated method stub
  56.                 TextView tv = (TextView) v;
  57.                 tv.setText(“正在加载中…”);
  58.                 getJSONArray(mData);
  59.                 tv.setText(“下一页”);
  60.                 mJson.notifyDataSetChanged();
  61.             }
  62.         });
  63.         lv.setAdapter(mJson);// 绑定适配器
  64.     }
  65.     /** 数据源JSONArray */
  66.     private void getJSONArray(JSONArray jArray) {
  67.         try {
  68.             for (int i = 1; i <= 5; i++) {
  69.                 JSONObject jsonObject = new JSONObject();
  70.                 jsonObject.put(“title”, “姓名” + num++);
  71.                 jsonObject.put(“time”, “9月29日”);
  72.                 jsonObject.put(“info”, “我通过了你的好友验证请求,现在我们可以开始对话啦”);
  73.                 jsonObject.put(“img”, R.drawable.special_spring_head2);
  74.                 jArray.put(jsonObject);
  75.                 if (num == count) {
  76.                     lv.removeFooterView(view_page_footer);
  77.                     Toast.makeText(this, “没有更多数据了…”, Toast.LENGTH_LONG)
  78.                             .show();
  79.                 }
  80.             }
  81.         } catch (Exception e) {
  82.             // TODO: handle exception
  83.         }
  84.     }
  85. }

其中,所添加的底部视图,只有一个供点击追加的按钮:

[html][/html] view plaincopy

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
  3.     android:layout_width=”match_parent”
  4.     android:layout_height=”wrap_content”
  5.     android:orientation=”vertical”
  6.     android:padding=”5dp”>
  7.     <TextView
  8.         android:id=”@+id/text_page”
  9.         android:layout_width=”fill_parent”
  10.         android:layout_height=”wrap_content”
  11.         android:text=”下一页”
  12.         android:gravity=”center”/>
  13. </LinearLayout>

效果图

点击“下一页”,会在ListView后追加数据。
追加完成后,清除底部视图。

标签