zoukankan      html  css  js  c++  java
  • GridView 滑动到底部时加载新数据

    首先是GridView监听Scoll事件,当到达底部是,做相应的操作。

    具体的GridViewScoll事件,网络牛人已经写的很好了,转载地http://blog.csdn.net/hellogv/article/details/6615487

    View Code
    /**
     * @author admin
     * GridView 滑动监听器
     */
    public class GridScrollListener implements OnScrollListener {
    
          /**
           * 到底部时回调函数
           */
          public interface AutoLoadCallBack {
            void execute();
          }
    
          private int getLastVisiblePosition = 0, lastVisiblePositionY = 0;
          private AutoLoadCallBack mCallback;
    
          public GridScrollListener(AutoLoadCallBack callback) {
            this.mCallback = callback;
          }
    
          public void onScrollStateChanged(AbsListView view, int scrollState) {
    
            if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
              //滚动到底部   
              if (view.getLastVisiblePosition() == (view.getCount() - 1)) {
                View v = (View) view.getChildAt(view.getChildCount() - 1);
                int[] location = new int[2];
                v.getLocationOnScreen(location);//获取在整个屏幕内的绝对坐标
                int y = location[1];
    
                //MyLog.d("x" + location[0], "y" + location[1]);
                if (view.getLastVisiblePosition() != getLastVisiblePosition && lastVisiblePositionY != y)//第一次拖至底部     
                {
                  Toast.makeText(view.getContext(), "已经拖动至底部,再次拖动即可翻页", 500).show();
                  getLastVisiblePosition = view.getLastVisiblePosition();
                  lastVisiblePositionY = y;
                 
                  return;
                } else if (view.getLastVisiblePosition() == getLastVisiblePosition && lastVisiblePositionY == y)//第二次托至底部    
                {
                  mCallback.execute();
                }
              }
    
              //未滚动到底部,第二次托至底部都初始化
              getLastVisiblePosition = 0;
              lastVisiblePositionY = 0;
            }
          }
    
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            // TODO Auto-generated method stub
            
        }
        
        
    
    
        }
    然后是在到达底部时根据回调函数来进行添加新数据
    /**
     * @author admin 
     */
    public class GoodsShowView implements InitLayoutI {
        private static String TAG = "GoodsView";
        private View mView;
        private Activity mActivity;
        private GridView gridview;
        private LinearLayout myLayout;
        private LinearLayout _layout;
        private LayoutInflater inflater;
        private GoodsInfo goodsInfo;
        private static int NumColumns = 2;
    
        private List<GoodsInfo> goodsList;
    
        public GoodsShowView(View view, Activity activity, LinearLayout layout) {
            // TODO Auto-generated constructor stub
            this.mView = view;
            this.mActivity = activity;
            inflater = LayoutInflater.from(mActivity);
            this.myLayout = layout;
            initLayout();
        }
    
        @Override
        public void initLayout() {
            // TODO Auto-generated method stub
            System.out.println(TAG + "-----" + "1");
            View _view = inflater.inflate(R.layout.goods_show_layout, null);
            _layout = (LinearLayout) _view.findViewById(R.id.goods_show_layoutID);
            initWidget();
            myLayout.removeAllViews();
            myLayout.addView(_layout);
    
        }
    
        @Override
        public void initWidget() {
            // TODO Auto-generated method stub
            
            /* 九宫格 */
            gridview = (GridView) _layout.findViewById(R.id.MainActivityGrid);
            goodsList = getData();
            MyGridAdapter adapter = new MyGridAdapter(goodsList, mActivity);
        
            gridview.setAdapter(adapter);
            gridview.setNumColumns(NumColumns);
            gridview.setOnItemClickListener(new gridViewOnClick());
            GridScrollListener autoLoadListener = new GridScrollListener(callBack);
            gridview.setOnScrollListener(autoLoadListener);
        }
    
        @Override
        public Object initData() {
            return goodsInfo;
            // TODO Auto-generated method stub
        }
    
        private List<GoodsInfo> getData() {
            System.out.println(TAG + "--------加载数据");
            List<GoodsInfo> list = new ArrayList<GoodsInfo>();
            for (int i = 0; i < 10; i += 1) {
                goodsInfo = new GoodsInfo();
                Random random = new Random(10000);
                goodsInfo.setGoodsName("物品");
                goodsInfo.setGoodsPrice(10000);
                goodsInfo.setGoodsInfos("物美价廉");
                // goodsInfo.setGoodsImage(R.drawable.small);
                list.add(goodsInfo);
            }
            return list;
        }
    
        /**
         * 翻页下页数据
         */
        private void getNextData() {
            // TODO Auto-generated method stub
            ListAdapter la = gridview.getAdapter();
                    //新数据源
            List<GoodsInfo> list = new ArrayList<GoodsInfo>();
            for (int i = 0; i < 10; i += 1) {
                goodsInfo = new GoodsInfo();
                Random random = new Random(10000);
                goodsInfo.setGoodsName("物品");
                goodsInfo.setGoodsPrice(500);
                goodsInfo.setGoodsInfos("物美价廉");
                
                           //注意!添加到原先适配器的List
                goodsList.add(goodsInfo); 
            }
                     //核心!通知GridView适配器 数据改变
            ((MyGridAdapter) la).notifyDataSetChanged();
        }
    
        private class BtnOnclick implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(mActivity, "点击" + 0, 0).show();
            }
        }
    
        private class gridViewOnClick implements OnItemClickListener {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                int index = arg2 + 1;
                Toast.makeText(mActivity, "点击" + index, 0).show();
                Intent intent = new Intent();
                intent.setClass(mActivity, GoodsActivity.class);
                mActivity.startActivity(intent);
            }
    
        }
    
        /**
         * 回调函数
         */
        AutoLoadCallBack callBack = new AutoLoadCallBack() {
    
            public void execute() {
                Toast.makeText(mActivity, "滚动至底部", 500).show();
                getNextData();
            }
    
        };
    
    }
                                
  • 相关阅读:
    红外应用
    电池分类及特点
    温湿度传感器AM2302(DH22)
    lora
    跳频扩频技术学习
    STM32F4/F7运算性能
    物联网相关模块
    DC-DC芯片
    外部引用CSS中 link与@import的区别
    超酷实用的jQuery焦点图赏析及源码
  • 原文地址:https://www.cnblogs.com/gfqFighting/p/2807428.html
Copyright © 2011-2022 走看看