Android+Listview+分页+动态加载网络数据

最近搞Android动态加载网络数据总结点心得:

list_item.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="horizontal">
          
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical">
  <TextView
     android:id="@+id/Gds_Name"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:textSize="20px"
     />
    
  <TextView
     android:id="@+id/Gds_Code"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>

显示加载更多的布局代码loadmore.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <Button  
      android:id="@+id/loadMoreButton"  
      android:layout_width="fill_parent"  
      android:layout_height="wrap_content"
      android:text="查看更多..." /> 
</LinearLayout>


商品类Goods.java的代码如下:

package com.jemsn.util;

public class Goods {
	private String Goods_ID;
	private String Gds_Code;
	private String Gds_Name;
	private String Gds_BarCode;
	private String Gds_Unit;
	private Double Gds_Ref;
	private String Gds_Price;
	private String Gds_PUnit;
	private String Gds_ClassID;
	private String Gds_GdsPY;

	public String getGoods_ID() {
		return Goods_ID;
	}

	public void setGoods_ID(String goods_ID) {
		Goods_ID = goods_ID;
	}

	public String getGds_Code() {
		return Gds_Code;
	}

	public void setGds_Code(String gds_Code) {
		Gds_Code = gds_Code;
	}

	public String getGds_Name() {
		return Gds_Name;
	}

	public void setGds_Name(String gds_Name) {
		Gds_Name = gds_Name;
	}

	public String getGds_BarCode() {
		return Gds_BarCode;
	}

	public void setGds_BarCode(String gds_BarCode) {
		Gds_BarCode = gds_BarCode;
	}

	public String getGds_Unit() {
		return Gds_Unit;
	}

	public void setGds_Unit(String gds_Unit) {
		Gds_Unit = gds_Unit;
	}

	public Double getGds_Ref() {
		return Gds_Ref;
	}

	public void setGds_Ref(Double gds_Ref) {
		Gds_Ref = gds_Ref;
	}

	public String getGds_Price() {
		return Gds_Price;
	}

	public void setGds_Price(String gds_Price) {
		Gds_Price = gds_Price;
	}

	public String getGds_PUnit() {
		return Gds_PUnit;
	}

	public void setGds_PUnit(String gds_PUnit) {
		Gds_PUnit = gds_PUnit;
	}

	public String getGds_ClassID() {
		return Gds_ClassID;
	}

	public void setGds_ClassID(String gds_ClassID) {
		Gds_ClassID = gds_ClassID;
	}

	public String getGds_GdsPY() {
		return Gds_GdsPY;
	}

	public void setGds_GdsPY(String gds_GdsPY) {
		Gds_GdsPY = gds_GdsPY;
	}

}


程序的主界面AndroidQueryActivity代码如下:

package com.jemsn.android;


import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;

import com.jemsn.util.DialogUtil;
import com.jemsn.util.Goods;
import com.jemsn.util.WebServiceUtil;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class AndroidQueryActivity extends Activity implements OnScrollListener {

	private ListView list_View;
	private int visibleLastIndex = 0; // 最后的可视项索引
	private int visibleItemCount; // 当前窗口可见项总数
	private int datasize = 100; // 模拟数据集的条数
	private PaginationAdapter adapter;
	private View loadMoreView;
	private Button loadMoreButton,Search_Btn;
	private Handler handler = new Handler();
	private EditText SearcText;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.view_item);
		SearcText = (EditText) findViewById(R.id.text_SeGds);
		Search_Btn=(Button)findViewById(R.id.BtnGoods_Search);
		loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null);
		loadMoreButton = (Button) loadMoreView
				.findViewById(R.id.loadMoreButton);
		loadMoreButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				loadMoreButton.setText("正在加载中..."); // 设置按钮文字
				handler.postDelayed(new Runnable() {

					@Override
					public void run() {
						loadMoreData();
						adapter.notifyDataSetChanged();
						Toast.makeText(AndroidQueryActivity.this, "数据加载完!", Toast.LENGTH_LONG).show();
						loadMoreButton.setText("查看更多..."); // 恢复按钮文字
					}
				}, 2000);

			}
		});
		Search_Btn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				initializeAdapter();
				list_View.setAdapter(adapter);
			}
		});
		
		list_View = (ListView)findViewById(R.id.GoodsList);
		
		list_View.addFooterView(loadMoreView); // 设置列表底部视图
		Log.e("WangYOUHellow","Goods");
		initializeAdapter();
		
		list_View.setAdapter(adapter);
		Log.e("WangYOUHellow","Hellow");
		list_View.setOnScrollListener(this);
	}

	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		int itemsLastIndex = adapter.getCount() - 1; // 数据集最后一项的索引
		int lastIndex = itemsLastIndex + 1;
		if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
				&& visibleLastIndex == lastIndex) {
			// 如果是自动加载,可以在这里放置异步加载数据的代码
		}
	}

	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {
		this.visibleItemCount = visibleItemCount;
		visibleLastIndex = firstVisibleItem + visibleItemCount - 1;

		// 如果所有的记录选项等于数据集的条数,则移除列表底部视图
		if (totalItemCount == datasize + 1) {
			//list_View.removeFooterView(loadMoreView);
			Toast.makeText(this, "数据全部加载完!", Toast.LENGTH_LONG).show();
		}
	}

	/**
	 * 初始化ListView的适配器
	 */
	private void initializeAdapter() {
		Log.e("WangYOUHellow","Bad");
		try {
			String Parame = SearcText.getText().toString();
			String ReturnStr = WebServiceUtil
					.getCityListByProvince(Parame, "1");
			//DialogUtil.showDialog(this,ReturnStr, false);
			JSONArray jsonArray;
			// DialogUtil.showDialog(this, ReturnStr, false);
			if (ReturnStr.contentEquals("anyType{}")) {
				jsonArray = new JSONArray();
			} else {
				jsonArray = new JSONArray(ReturnStr);
			}
			// 向指定URL发送请求,并把服务器响应转换成JSONArray对象

			// 将JSONArray包装成Adapter
			List<Goods> GoodsArry = new ArrayList<Goods>();

			for (int i = 0; i<jsonArray.length(); i++) {
				Goods items = new Goods();
				items.setGds_Name(jsonArray.optJSONObject(i).getString(
						"GdsName"));
				items.setGds_Code(jsonArray.optJSONObject(i).getString(
						"GdsCode"));
				GoodsArry.add(items);
			}
			adapter = new PaginationAdapter(GoodsArry);
		} catch (Exception e) {
			//DialogUtil.showDialog(this, e.getMessage(), false);
			e.printStackTrace();
		}

	}

	/**
	 * 加载更多数据
	 */
	private void loadMoreData() {
		int count = adapter.getCount();

		try {

			String Parame = SearcText.getText().toString();
			String pageSize = String.valueOf(count / 10 + 1);
			String ReturnStr = WebServiceUtil.getCityListByProvince(Parame,
					pageSize);
			JSONArray jsonArray;
			// DialogUtil.showDialog(this, ReturnStr, false);
			if (ReturnStr.contentEquals("anyType{}")) {
				jsonArray = new JSONArray();
			} else {
				jsonArray = new JSONArray(ReturnStr);
			}
			// 向指定URL发送请求,并把服务器响应转换成JSONArray对象

			// 将JSONArray包装成Adapter
			for (int i = 1; jsonArray.length() <= 10; i++) {
				Goods items = new Goods();
				items.setGds_Name(jsonArray.optJSONObject(i).getString(
						"GdsName"));
				items.setGds_Code(jsonArray.optJSONObject(i).getString(
						"GdsCode"));
				adapter.addNewsItem(items);
			}
		} catch (Exception e) {
			//DialogUtil.showDialog(this, e.getMessage(), false);
			e.printStackTrace();
		}

	}

	class PaginationAdapter extends BaseAdapter {

		List<Goods> newsItems;

		public PaginationAdapter(List<Goods> newsitems) {
			this.newsItems = newsitems;
		}

		@Override
		public int getCount() {
			return newsItems.size();
		}

		@Override
		public Object getItem(int position) {
			return newsItems.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View view, ViewGroup parent) {
			if (view == null) {
				view = getLayoutInflater().inflate(R.layout.list_item, null);
			}

			// 商品名称
			TextView tvGdsName = (TextView) view.findViewById(R.id.Gds_Name);
			tvGdsName.setText(newsItems.get(position).getGds_Name());
			// 商品编码
			TextView tvGdsCode = (TextView) view.findViewById(R.id.Gds_Code);
			tvGdsCode.setText(newsItems.get(position).getGds_Code());

			return view;
		}

		/**
		 * 添加数据列表项
		 * 
		 * @param newsitem
		 */
		public void addNewsItem(Goods newsitem) {
			newsItems.add(newsitem);
		}

	}

}

程序运行效果图如下:


 


 

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值