android listView滚动分页

package com.nxt;




import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.nxt.AsyncImageLoader.ImageCallback;





import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsListView;

import android.widget.AbsListView.OnScrollListener;
import android.widget.HorizontalScrollView;
import android.widget.ImageButton;
import android.widget.LinearLayout.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class ViewWeb extends Activity {
    //整体的布局是由一个scrollView组成
    ScrollView main;
    //自身
    public static ViewWeb vieweb;
    private int lastItem = 0;
    LinearLayout loadingLayout;
    //ListView的适配器
    private listViewAdapter adapter; 
    private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    LayoutInflater LayoutInflater;
    
    LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.FILL_PARENT,
            LinearLayout.LayoutParams.FILL_PARENT);
    TableLayout.LayoutParams tableP=new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
            TableLayout.LayoutParams.WRAP_CONTENT);
        LinearLayout.LayoutParams p=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
                 LinearLayout.LayoutParams.WRAP_CONTENT);
        TableRow.LayoutParams rowP=new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT,
               TableRow.LayoutParams.WRAP_CONTENT);
    //显示的listView    
    ListView listView ;
    //得到所有的景点详情
    Page [] allPageData;
//    //当前页的详情
//     Page page; 
    //一半的URL
    String harfUrl;
    String city;
    String siteid;
    String title;
    public boolean isLoading;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.website);
       vieweb=this;
       Intent intent = getIntent();
       String strSin=intent.getStringExtra("sign");
       int sign=0;
       if(strSin!=null){
       //得到获取服务器参数的URL
           sign=Integer.parseInt(strSin);
       }
       String url=intent.getStringExtra("url");
      
       city=intent.getStringExtra("name");
       siteid=intent.getStringExtra("sited");
       title=intent.getStringExtra("title");
       if(url==null || sign==0){
           allPageData=FarmerBoolons.farmerboolons.pages; 
       }else{
       //得到所有的
        allPageData=DataStore.obtainPages(url,sign);
       }
       if(allPageData!=null && allPageData.length!=0){
          
       //设置标题
           TextView text=(TextView)findViewById(R.id.first);
           text.setText(title+"(共"+allPageData[0].getTotal()+"个)");
      //总体布局
        listView = (ListView) findViewById(R.id.myList);

        LinearLayout layout = new LinearLayout(this);
        // 设置布局 水平方向
        layout.setOrientation(LinearLayout.HORIZONTAL);
        //把得到的半个siteid加上
//          harfUrl="http://test.365960.com/item.php?act=detail&siteid="+intent.getStringExtra("siteid")+"&channel=nj&";
        LayoutInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);//拿到layoout服务
        adapter = new listViewAdapter();
        listView.setAdapter(adapter);
        listView.setVerticalScrollBarEnabled(true); 
        listView.setBackgroundColor(Color.WHITE);
        ImageButton soso=(ImageButton)findViewById(R.id.soso);
        soso.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ViewWeb.this, MlcxWebview.class);
                intent.putExtra(
                        "url",
                        "http://test.365960.com/item.php?act=search&searchsubmit=yes&mobile=ok&searchsort=subject");
                startActivity(intent);
                // TODO Auto-generated method stub
                
            }
            
        });
       
        //初始化scroll
//        main=(ScrollView)findViewById(R.id.scroll);
//        main.set(scrollListener);
//        LinearLayout layout=(LinearLayout)findViewById(R.id.webView);
        //初始化TableLayout
//        main=(ListView)findViewById(R.id.scroll);
//       table = (TableLayout) findViewById(R.id.table);
//        table=new TableLayout(this);
        // 设置ListView的页脚layout
    
        //设置适配器
      
        listView.setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub
//                Log.i(“test” , “Scroll>>>first: ” + firstVisibleItem + “, visible: ” + visibleItemCount + “, total: ” + totalItemCount);
                //总共有多少条记录
                int total=allPageData.length;
                if(total>adapter.count){
                lastItem = firstVisibleItem + visibleItemCount-1;
//                Log.i(“test” , “Scroll>>>lastItem:” + lastItem);
                //显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件
                
                
                int scrolllength=total;
                if (adapter.count<=scrolllength) {
                    if (firstVisibleItem+visibleItemCount==totalItemCount) {
//                        adapter.count +=5;
//                        adapter.notifyDataSetChanged();
//                        listView.setSelection(lastItem);
//                        int currentPage=adapter.count%5==0?adapter.count/5:(adapter.count/5)+1;
//                        Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_SHORT).show();
                        //isLoading用于控制重复加载  
                        if(!isLoading){  
                        new MyTask().execute(null);  
                        }  
                    }
                }
                
                }else{
                    adapter.count=total;
                }
            }
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                
            }
        });
       }else{
           Toast.makeText(ViewWeb.this, "对不起没有查找到所需内容", Toast.LENGTH_SHORT).show();
             Intent go = new Intent(ViewWeb.this,MlcxMain.class);
             go.putExtra("sited",siteid);
                go.putExtra("name",city);
                startActivity(go);
             ViewWeb.this.finish();
       }
       //显示图片及详情
//       loadDetail(start,end);

        
    }
    
    //从网上获取图片
    public static Bitmap getHttpBitmap(String url) {
        
        URL myFileUrl = null;
        Bitmap bitmap = null;
        try {
        
        myFileUrl = new URL(url);
        } catch (MalformedURLException e) {
        return null;
        }
        try {
        HttpURLConnection conn = (HttpURLConnection) myFileUrl
        .openConnection();
        conn.setConnectTimeout(0);
        conn.setDoInput(true);
        conn.connect();
        InputStream is = conn.getInputStream();
        bitmap = BitmapFactory.decodeStream(is);
        is.close();
        } catch (IOException e) {
        e.printStackTrace();
        return null;
        
        }
        return bitmap;
        }

//设置图片大
    protected  static Bitmap  getScaleImg(Bitmap bm, int newWidth, int newHeight) {
        // 图片源
        // Bitmap bm = BitmapFactory.decodeStream(getResources()
        // .openRawResource(id));
        // 获得图片的宽高
        int width = bm.getWidth();
        int height = bm.getHeight();
        // 设置想要的大小
        int newWidth1 = newWidth;
        int newHeight1 = newHeight;
        // 计算缩放比例
        float scaleWidth = ((float) newWidth1) / width;
        float scaleHeight = ((float) newHeight1) / height;
        // 取得想要缩放的matrix参数
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        // 得到新的图片
        Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,
          true);
        return newbm;

       }
    class listViewAdapter extends BaseAdapter {
        //一个listView显示的数据数
        int count =10; /* starting amount */
        //异步加载图片的线程
        private AsyncImageLoader imageLoader = new AsyncImageLoader();
        @Override
        public int getCount() {
            return count;
        }
        @Override
        public Object getItem(int pos) {
            return pos;
        }
        @Override
        public long getItemId(int pos) {
            return pos;
        }
        //当前的缓存
        private Map<Integer, View> viewMap = new HashMap<Integer, View>();
        @Override
        public View getView(int pos, View v, ViewGroup group) {
            //缓存器
            View rowView =viewMap.get(pos);
            
            
            //如果当前没有内容
            if(rowView==null){
//                System.out.println(v);
                TableLayout table=new TableLayout(ViewWeb.this);    
             TableRow layout=new TableRow(ViewWeb.this);
             layout.setOrientation(LinearLayout.HORIZONTAL);

            
            final Page page =allPageData[pos];
            
             
             if(pos>allPageData.length-1){
                 pos=allPageData.length-1;
                 
             }
             //右边的整体布局
             View right = LayoutInflater.inflate(R.layout.right, null);
               right.setPadding(20, 10, 10, 10);
//             final ImageView imageView=(ImageView)right.findViewById(R.id.synjd);
               //图片显示单开一个线程
               final ImageView imageView=new ImageView(ViewWeb.this);
               imageView.setBackgroundResource(R.drawable.wait);
               imageView.setPadding(10, 10, 10, 10);
               String strImg=page.getImg();
               if(strImg!=null){
//                   if(strImg.indexOf("ima")!=-1){
//                   strImg="http://365960.com/"+strImg;
//                   page.setImg(strImg);
//                   }
             imageLoader.loadDrawable(strImg, new ImageCallback() {

                    public void imageLoaded(Bitmap imageDrawable, String imageUrl) {
                        imageView.setBackgroundResource(0);
                        imageView.setImageBitmap(imageDrawable);
                        imageView.setPadding(10, 10, 10, 10);
                        page.setBitmap(imageDrawable);
                        
                    }
                });
             
               }

             
               //得到标题
               TextView title=(TextView)right.findViewById(R.id.firstTitle);
               title.setText(page.getTitle());
               //得到环境
               TextView hj=(TextView)right.findViewById(R.id.huangjingid);
               String target=page.getHj();
               String show=isNum(target);
               page.setHj(show);
//               else{
//                   String insert= modifyXiaoShu(Double.parseDouble(target.replaceAll("/n", "").trim()));
//                   page.setHj(insert);
//               }
               hj.setText(show);
               //服务
               TextView fw=(TextView)right.findViewById(R.id.fuwuid);
             
               target=page.getHj();
                show=isNum(target);
                page.setFw(show);
               
//               if(page.getFw()==null || page.getFw().equals("") ){
//                   page.setFw("0");
//               }
//               else{
//                   String insert= modifyXiaoShu(Double.parseDouble(target.replaceAll("/n", "").trim()));
//                   page.setFw(insert);
//               }
               fw.setText(isNum(target));
               //口味
               TextView kw=(TextView)right.findViewById(R.id.kouweiid);
               show=isNum(target);
               target=page.getKw();
               page.setKw(show);
//               if(page.getKw()==null || page.getKw().equals("") ){
//                   page.setKw("0");
//               }
//               else{
//                   String insert= modifyXiaoShu(Double.parseDouble(target.replaceAll("/n", "").trim()));
//                  page.setKw(insert);
//               }
               kw.setText(isNum(target));
               //价格
               TextView jg=(TextView)right.findViewById(R.id.jiageid);
               target=page.getJg();
               show=isNum(target);
               page.setJg(show);
//               if(page.getJg()==null || page.getJg().equals("") ){
//                   page.setJg("0");
//               }
               jg.setText(isNum(target));
//               else{
//                  String insert= modifyXiaoShu(Double.parseDouble(target.replaceAll("/n", "").trim()));
//                  page.setJg(insert);
//               }
              
               //综合得分
               
               TextView zhdf=(TextView)right.findViewById(R.id.zhdfid);
               
               String df=page.getZhdf();
               if(df==null || df.equals("")){
                   try{
                   df=String.valueOf((Integer.parseInt(page.getJg())+Integer.parseInt(page.getHj())+Integer.parseInt(page.getKw())+Integer.parseInt(page.getFw()))/4);
                   }catch(Exception e){
                       df="0";
                       page.setZhdf(df);
                   }
               }
              
               double score=Double.parseDouble(df)/2;
               String strScore=String.valueOf(score);
               //1位小数点显示
               BigDecimal   bd   =   new   BigDecimal(strScore);
               bd   =   bd.setScale(1,BigDecimal.ROUND_HALF_UP);
               score=bd.doubleValue();
              
               zhdf.setText(String.valueOf(score));
               page.setZhdf(String.valueOf(score));
               //判断有几颗完全的星
               int fullStar=(int)score/1;
               //判断是否有半个的星
               boolean hasHarf=false;
               if(score%1!=0){
                   hasHarf=true;
               }
               
               //7个ImageView的
               int []imageIndex={R.id.image0,R.id.image1,R.id.image2,R.id.image3,R.id.image4};
             //放星的那八个ImageView
               ImageView imageViews[]=new ImageView[imageIndex.length];
               for(int i=0;i<imageViews.length;i++){
                   
                   imageViews[i]=(ImageView)right.findViewById(imageIndex[i]);
                   if(i<=fullStar-1){
                       imageViews[i].setBackgroundResource(R.drawable.star);
                   }else if(hasHarf && i==fullStar){
                       imageViews[i].setBackgroundResource(R.drawable.harfstar); 
                   }else{
                       imageViews[i].setBackgroundResource(R.drawable.nostar); 
                   }
               }
               //画出一行
               layout.addView(imageView, rowP);
               layout.addView(right, rowP);
               //画出整个表格
               table.addView(layout,tableP);
              
//              final String url= harfUrl+"id="+page.getSid()+"&mobile=ok&output=xml";
               //把当前的位置传过去
              final String index=String.valueOf(pos);
               layout.setOnClickListener(new OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        //传到详细信息的页面
                        Intent intent = new Intent(ViewWeb.this,ViewWebDetail.class);
                        intent.putExtra("index",index);
                        startActivity(intent);
                        
                    }
                      
                  });
               //把位置和view都放到缓存里
               viewMap.put(pos, table);
               return table;

            }else{
                //如果有的话就直接返回缓存里的
            return rowView ;
            }
        }
    }
     private class MyTask extends AsyncTask<Void, Void, Void> {  
            @Override  
            protected void onPreExecute() {  
                super.onPreExecute();  
          
                isLoading =true;  
            }  
            @Override  
            protected Void doInBackground(Void... params) {  
                try {  
                    Thread.sleep(1);  
                } catch (InterruptedException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
                adapter.count += 10;  
                return null;  
            }  
            @Override  
            protected void onPostExecute(Void result) {  
                super.onPostExecute(result);  
                adapter.notifyDataSetChanged();  
                listView.setSelection(lastItem);  
                int currentPage = adapter.count /10;  
                Toast.makeText(getApplicationContext(), "第" + (currentPage+1) + "页",  
                        Toast.LENGTH_LONG).show();  
              
                isLoading = false;  
            }  
        }  
    //修改小数位数
        public static String modifyXiaoShu(double score){
            java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.0");
            return df.format(score).toString();
            }
        //判断是否为数字
        public static String isNum(String target){
            
            String replace="0";
            if(target!=null){
            String regStr="\\d+\\.\\d*";
            Pattern pattern = Pattern.compile(regStr);
            Matcher matcher = pattern.matcher(target);
            boolean flag=matcher.find();
            if (flag) {
                replace = matcher.group();
                Double num=Double.valueOf(replace);
                if(num==0){
                    replace="0";
                }else{
                    replace=modifyXiaoShu(num);
                }
            }else{
                regStr="\\d+";
                pattern = Pattern.compile(regStr);
                matcher = pattern.matcher(target);
                if(matcher.find()){
                    replace = matcher.group();
                    Double num=Double.valueOf(replace);
                    if(num==0){
                        replace="0";
                    }
                }
            }
            }
            return replace;
        }
        
//        public boolean onKeyDown(int keyCode, KeyEvent event) {
//            if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
//                
//                if(NearbyMap.byMap!=null){
//                    Intent intent=new Intent(ViewWeb.this,NearbyMap.byMap.getClass());
//                    startActivity(intent);
//                }else{
//                    Intent intent=new Intent(ViewWeb.this,MlcxMain.class);
//                    startActivity(intent);
//                }
//                return false;
//            }
//            return false;
//        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值