您的位置:首页 > 理论基础 > 计算机网络

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

2012-10-18 15:19 441 查看
list_item.xml代码如下:

[html]
view plaincopy

<?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如下:

[html]
view plaincopy

<?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的代码如下:

[java]
view plaincopy

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代码如下:

[java]
view plaincopy

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();  
          
      
d9b1
  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);  
        }  
  
    }  
  
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息