android:ListView的分页

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" />
相关文章
相关标签/搜索