public class MainActivity extends Activity { private ListView listview_load; private View layout; // private LinearLayout layout; private MyBaseAdapter adapter; private List<Map<String, Object>> data; private boolean isbottom;// 是否为最后一个数据标记 private String url = "http://m2.qiushibaike.com/article/list/suggest?page="; private int currentPage = 1;// 当前页码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.listview_load = (ListView) this.findViewById(R.id.listview_load); layout = this.findViewById(R.id.layout); // layout = (LinearLayout) this.findViewById(R.id.layout); data = new ArrayList<Map<String, Object>>(); adapter = new MyBaseAdapter(data); listview_load.setAdapter(adapter); new MyAsyncTask().execute(url + currentPage); listview_load.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener.SCROLL_STATE_IDLE:// 中止时 if (isbottom) { currentPage++; // 加载下一页数据, 显示进度条 layout.setVisibility(View.VISIBLE); new MyAsyncTask().execute(url + currentPage); } break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // 到达底部最后一条,判断再加载数据 isbottom = ((firstVisibleItem + visibleItemCount) == totalItemCount); } }); } // 异步方法进行联网下载 class MyAsyncTask extends AsyncTask<String, Void, byte[]> { @Override protected byte[] doInBackground(String... params) { HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(params[0]); try { Log.i("MainActivity", "-3-"); HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == 200) { return EntityUtils.toByteArray(response.getEntity()); } Log.i("MainActivity", "-4-"); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } // 联网下载完后立刻执行 @Override protected void onPostExecute(byte[] result) { if (result != null) { List<Map<String, Object>> list = parserJSON(new String(result)); adapter.data.addAll(list);// 将数据给到data-list adapter.notifyDataSetChanged();// 会调用MyBaseAdapter中的getView方法 Log.i("MainActivity", "-list-" + list.size()); } else { Toast.makeText(MainActivity.this, "网络链接错误!!", Toast.LENGTH_SHORT).show(); } layout.setVisibility(View.GONE); } // JSON解析 private List<Map<String, Object>> parserJSON(String json) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); try { JSONObject obj = new JSONObject(json); JSONArray array = obj.getJSONArray("items"); for (int i = 0; i < array.length(); i++) { JSONObject object_items = array.getJSONObject(i); Map<String, Object> itemMap = new HashMap<String, Object>(); itemMap.put("content", object_items.getString("content")); itemMap.put("image", object_items.getString("image")); itemMap.put("comments_count", object_items.getString("comments_count")); list.add(itemMap); } Log.i("MainActivity", "itemMap"); } catch (JSONException e) { e.printStackTrace(); } return list; } } // BaseAdapter适配器的代码填写 class MyBaseAdapter extends BaseAdapter { private List<Map<String, Object>> data; public MyBaseAdapter(List<Map<String, Object>> data) { this.data = data; } @Override public int getCount() { return this.data.size(); } @Override public Object getItem(int position) { return this.data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vHolder; if (convertView == null) { vHolder = new ViewHolder(); convertView = getLayoutInflater().inflate( R.layout.listview_item, null); TextView text_content = (TextView) convertView .findViewById(R.id.text_content); TextView text_image = (TextView) convertView .findViewById(R.id.text_image); TextView comments_count = (TextView) convertView .findViewById(R.id.comments_count); vHolder.text_content = text_content; vHolder.text_image = text_image; vHolder.comments_count = comments_count; convertView.setTag(vHolder); } else { vHolder = (ViewHolder) convertView.getTag(); } vHolder.text_content.setText(this.data.get(position).get("content") .toString()); vHolder.comments_count.setText(this.data.get(position) .get("comments_count").toString()); // 图片时另外判断,固然这里只是获取图片的名字,并无下载图片,实际中文字和图片是分开下载的 if (!this.data.get(position).get("image").equals("null")) { vHolder.text_image.setText(this.data.get(position).get("image") .toString()); } return convertView; } class ViewHolder { private TextView text_content; private TextView text_image; private TextView comments_count; } } } //主布局 <ListView android:id="@+id/listview_load" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- 如下这个是进度条 --> <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#000" android:gravity="center" android:orientation="horizontal" android:visibility="gone" > <ProgressBar android:id="@+id/pb" style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text_load" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在下载。。。。" android:textColor="#fff" /> </LinearLayout> //适配器自定义布局 <TextView android:id="@+id/text_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#00f" /> <TextView android:id="@+id/text_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#f00" /> <TextView android:id="@+id/comments_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#999" />