1. 程式人生 > >Android GridView 分頁載入資料

Android GridView 分頁載入資料

android UI 往右滑動,滑動到最後一頁就自動載入資料並顯示
如圖:



Java程式碼  收藏程式碼
  1. package cn.anycall.ju;  
  2. import java.util.ArrayList;  
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6. import android.app.Activity;  
  7. import android.content.ActivityNotFoundException;  
  8. import android.content.Context;  
  9. import android.content.Intent;  
  10. import android.content.pm.ResolveInfo;  
  11. import android.os.Bundle;  
  12. import android.os.Handler;  
  13. import android.os.Looper;  
  14. import android.os.Message;  
  15. import android.view.KeyEvent;  
  16. import android.view.View;  
  17. import android.view.Window;  
  18. import android.widget.AdapterView;  
  19. import android.widget.AdapterView.OnItemClickListener;  
  20. import android.widget.GridView;  
  21. import android.widget.Toast;  
  22. import cn.anycall.ju.ScrollLayout.OnScreenChangeListenerDataLoad;  
  23. /** 
  24.  * GridView分頁顯示安裝的應用程式 
  25.  */
  26. publicclass AllAppList extends Activity {  
  27.     private ScrollLayout mScrollLayout;  
  28.     privatestaticfinalfloat APP_PAGE_SIZE = 4.0f;  
  29.     private Context mContext;  
  30.     private
     PageControlView pageControl;  
  31.     public MyHandler myHandler;  
  32.     publicint n=0;  
  33.     private DataLoading dataLoad;  
  34.     @Override
  35.     protectedvoid onCreate(Bundle savedInstanceState) {  
  36.         // TODO Auto-generated method stub
  37.         super.onCreate(savedInstanceState);  
  38.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  39.         mContext = this;  
  40.         setContentView(R.layout.main);  
  41.         dataLoad = new DataLoading();  
  42.         mScrollLayout = (ScrollLayout)findViewById(R.id.ScrollLayoutTest);  
  43.         myHandler = new MyHandler(this,1);  
  44.         //起一個執行緒更新資料
  45.         MyThread m = new MyThread();  
  46.         new Thread(m).start();  
  47.     }   
  48.     /** 
  49.      * gridView 的onItemLick響應事件 
  50.      */
  51.     public OnItemClickListener listener = new OnItemClickListener() {  
  52.         publicvoid onItemClick(AdapterView<?> parent, View view, int position,  
  53.                 long id) {  
  54.             // TODO Auto-generated method stub
  55.             System.out.println("position="+position);  
  56.         }  
  57.     };  
  58.     @Override
  59.     protectedvoid onDestroy() {  
  60.         // TODO Auto-generated method stub
  61.         android.os.Process.killProcess(android.os.Process.myPid());  
  62.         super.onDestroy();  
  63.     }  
  64.     @Override
  65.     publicboolean onKeyDown(int keyCode, KeyEvent event) {  
  66.         // TODO Auto-generated method stub
  67.         if (keyCode == KeyEvent.KEYCODE_BACK) {  
  68.             finish();  
  69.             returntrue;  
  70.         }  
  71.         returnsuper.onKeyDown(keyCode, event);  
  72.     }  
  73.     // 更新後臺資料
  74.     class MyThread implements Runnable {  
  75.         publicvoid run() {  
  76.             try {  
  77.                 Thread.sleep(1000*3);  
  78.             } catch (InterruptedException e) {  
  79.                 // TODO Auto-generated catch block
  80.                 e.printStackTrace();  
  81.             }  
  82.             String msglist = "1";  
  83.             Message msg = new Message();  
  84.             Bundle b = new Bundle();// 存放資料
  85.             b.putString("rmsg", msglist);  
  86.             msg.setData(b);  
  87.             AllAppList.this.myHandler.sendMessage(msg); // 向Handler傳送訊息,更新UI
  88.         }  
  89.     }  
  90.     class MyHandler extends Handler {  
  91.         private AllAppList mContext;  
  92.         public MyHandler(Context conn,int a) {  
  93.             mContext = (AllAppList)conn;  
  94.         }  
  95.         public MyHandler(Looper L) {  
  96.             super(L);  
  97.         }  
  98.         // 子類必須重寫此方法,接受資料
  99.         @Override
  100.         publicvoid handleMessage(Message msg) {  
  101.             // TODO Auto-generated method stub
  102.             super.handleMessage(msg);  
  103.             Bundle b = msg.getData();  
  104.             String rmsg = b.getString("rmsg");  
  105.             if ("1".equals(rmsg)) {  
  106.                 // do nothing
  107.                  List<Map> list = new ArrayList<Map>();  
  108.                  for(int i =0;i<16;i++){  
  109.                      n++;  
  110.                      Map map = new HashMap();  
  111.                         map.put("name", n);  
  112.                         list.add(map);  
  113.                  }  
  114.                 int pageNo = (int)Math.ceil( list.size()/APP_PAGE_SIZE);  
  115.                 for (int i = 0; i < pageNo; i++) {  
  116.                     GridView appPage = new GridView(mContext);  
  117.                     // get the "i" page data
  118.                     appPage.setAdapter(new AppAdapter(mContext, list, i));  
  119.                     appPage.setNumColumns(2);  
  120.                     appPage.setOnItemClickListener(listener);  
  121.                     mScrollLayout.addView(appPage);  
  122.                 }  
  123.                 //載入分頁
  124.                 pageControl = (PageControlView) findViewById(R.id.pageControl);  
  125.                 pageControl.bindScrollViewGroup(mScrollLayout);  
  126.                 //載入分頁資料
  127.                 dataLoad.bindScrollViewGroup(mScrollLayout);  
  128.                 }  
  129.             }  
  130.         }  
  131.     //分頁資料
  132.     class DataLoading {  
  133.         privateint count;  
  134.         publicvoid bindScrollViewGroup(ScrollLayout scrollViewGroup) {  
  135.             this.count=scrollViewGroup.getChildCount();  
  136.             scrollViewGroup.setOnScreenChangeListenerDataLoad(new OnScreenChangeListenerDataLoad() {  
  137.                 publicvoid onScreenChange(int currentIndex) {  
  138.                     // TODO Auto-generated method stub
  139.                     generatePageControl(currentIndex);  
  140.                 }  
  141.             });  
  142.         }  
  143.         privatevoid generatePageControl(int currentIndex){  
  144.             //如果到最後一頁,就載入16條記錄
  145.             if(count==currentIndex+1){  
  146.                 MyThread m = new MyThread();  
  147.                 new Thread(m).start();  
  148.             }  
  149.         }  
  150.     }  
  151. }  


Java程式碼  收藏程式碼
  1. package cn.anycall.ju;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import java.util.Map;  
  5. import android.content.Context;  
  6. import android.content.pm.PackageManager;  
  7. import android.content.pm.ResolveInfo;  
  8. import android.view.LayoutInflater;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.ImageView;  
  13. import android.widget.TextView;  
  14. import cn.anycall.ju.R;  
  15. publicclass AppAdapter extends BaseAdapter {  
  16.     private List<Map> mList;  
  17.     private Context mContext;  
  18.     publicstaticfinalint APP_PAGE_SIZE = 4;  
  19.     private PackageManager pm;  
  20.     public AppAdapter(Context context, List<Map> list, int page) {  
  21.         mContext = context;  
  22.         pm = context.getPackageManager();  
  23.         mList = new ArrayList<Map>();  
  24.         int i = page * APP_PAGE_SIZE;  
  25.         int iEnd = i+APP_PAGE_SIZE;  
  26.         while ((i<list.size()) && (i<iEnd)) {  
  27.             mList.add(list.get(i));  
  28.             i++;  
  29.         }  
  30.     }  
  31.     publicint getCount() {  
  32.         // TODO Auto-generated method stub
  33.         return mList.size();  
  34.     }  
  35.     public Object getItem(int position) {  
  36.         // TODO Auto-generated method stub
  37.         return mList.get(position);  
  38.     }  
  39.     publiclong getItemId(int position) {  
  40.         // TODO Auto-generated method stub
  41.         return position;  
  42.     }  
  43.     public View getView(int position, View convertView, ViewGroup parent) {  
  44.         // TODO Auto-generated method stub
  45.         Map appInfo = mList.get(position);  
  46.         AppItem appItem;  
  47.         if (convertView == null) {  
  48.             View v = LayoutInflater.from(mContext).inflate(R.layout.app_item, null);  
  49.             appItem = new AppItem();  
  50.             appItem.mAppIcon = (ImageView)v.findViewById(R.id.imgdetail);  
  51.             appItem.mAppName = (TextView)v.findViewById(R.id.tuaninfo);  
  52.             v.setTag(appItem);  
  53.             convertView = v;  
  54.         } else {  
  55.             appItem = (AppItem)convertView.getTag();  
  56.         }  
  57.         // set the icon
  58.         appItem.mAppIcon.setImageResource(R.drawable.icon);  
  59.         // set the app name
  60.         appItem.mAppName.setText(appInfo.get("name").toString());  
  61.         return convertView;  
  62.     }  
  63.     /** 
  64.      * 每個應用顯示的內容,包括圖示和名稱 
  65.      * @author Yao.GUET 
  66.      * 
  67.      */
  68.     class AppItem {  
  69.         ImageView mAppIcon;  
  70.         TextView mAppName;  
  71.     }  
  72. }  

Java程式碼  收藏程式碼
  1. package cn.anycall.ju;  
  2. import android.content.Context;  
  3. import android.util.AttributeSet;  
  4. import android.widget.ImageView;  
  5. import android.widget.LinearLayout;  
  6. import cn.anycall.ju.R;  
  7. import cn.anycall.ju.ScrollLayout.OnScreenChangeListener;  
  8. publicclass PageControlView extends LinearLayout {  
  9.     private Context context;  
  10.     privateint count;  
  11.     publicvoid bindScrollViewGroup(ScrollLayout scrollViewGroup) {  
  12.         this.count=scrollViewGroup.getChildCount();  
  13.         System.out.println("count="+count);  
  14.         generatePageControl(scrollViewGroup.getCurrentScreenIndex());  
  15.         scrollViewGroup.setOnScreenChangeListener(new OnScreenChangeListener() {  
  16.             publicvoid onScreenChange(int currentIndex) {  
  17.                 // TODO Auto-generated method stub
  18.                 generatePageControl(currentIndex);  
  19.             }  
  20.         });  
  21.     }  
  22.     public PageControlView(Context context) {  
  23.         super(context);  
  24.         this.init(context);  
  25.     }  
  26.     public PageControlView(Context context, AttributeSet attrs) {  
  27.         super(context, attrs);  
  28.         this.init(context);  
  29.     }  
  30.     privatevoid init(Context context) {  
  31.         this.context=context;  
  32.     }  
  33.     privatevoid generatePageControl(int currentIndex) {  
  34.         this.removeAllViews();  
  35.         int pageNum = 6// 顯示多少個 
  36.         int pageNo = currentIndex+1//第幾頁
  37.         int pageSum = this.count; //總共多少頁
  38.         if(pageSum>1){  
  39.             int currentNum = (pageNo % pageNum == 0 ? (pageNo / pageNum) - 1
  40.                      : (int) (pageNo / pageNum))     
  41.                      * pageNum;   
  42.              if (currentNum < 0)     
  43.                  currentNum = 0;     
  44.              if (pageNo > pageNum){  
  45.                  ImageView imageView = new ImageView(context);  
  46.                  imageView.setImageResource(R.drawable.zuo);  
  47.                  this.addView(imageView);  
  48.              }  
  49.              for (int i = 0; i < pageNum; i++) {     
  50.                  if ((currentNum + i + 1) > pageSum || pageSum < 2)     
  51.                      break;     
  52.                  ImageView imageView = new ImageView(context);  
  53.                  if(currentNum + i + 1 == pageNo){  
  54.                      imageView.setImageResource(R.drawable.page_indicator_focused);  
  55.                  }else{  
  56.                      imageView.setImageResource(R.drawable.page_indicator);  
  57.                  }  
  58.                  this.addView(imageView);  
  59.              }     
  60.              if (pageSum > (currentNum + pageNum)) {  
  61.                  ImageView imageView = new ImageView(context);  
  62.                  imageView.setImageResource(R.drawable.you);  
  63.                  this.addView(imageView);  
  64.              }  
  65.         }  
  66.     }  
  67. }  

Java程式碼  收藏程式碼
  1. package cn.anycall.ju;  
  2. import android.content.Context;  
  3. import android.graphics.Canvas;  
  4. import android.util.AttributeSet;  
  5. import android.util.Log;  
  6. import android.view.MotionEvent;  
  7. import android.view.VelocityTracker;  
  8. import android.view.View;  
  9. import android.view.ViewConfiguration;  
  10. import android.view.ViewGroup;  
  11. import android.widget.Scroller;  
  12. /** 
  13.  * 仿Launcher中的WorkSapce,可以左右滑動切換螢幕的類 
  14.  *  
  15.  */
  16. publicclass ScrollLayout extends ViewGroup {  
  17.     privatestaticfinal String TAG = "ScrollLayout";  
  18.     private Scroller mScroller;  
  19.     private VelocityTracker mVelocityTracker;  
  20.     privateint mCurScreen;  
  21.     privateint mDefaultScreen = 0;  
  22.     privatestaticfinalint TOUCH_STATE_REST = 0;  
  23.     privatestaticfinalint TOUCH_STATE_SCROLLING = 1;  
  24.     privatestaticfinalint SNAP_VELOCITY = 600;  
  25.     privateint mTouchState = TOUCH_STATE_REST;  
  26.     privateint mTouchSlop;  
  27.     privatefloat mLastMotionX;  
  28.     privatefloat mLastMotionY;  
  29.     privateint currentScreenIndex = 0;  
  30.     publicint getCurrentScreenIndex() {  
  31.         return currentScreenIndex;  
  32.     }  
  33.     publicvoid setCurrentScreenIndex(int currentScreenIndex) {  
  34.         this.currentScreenIndex = currentScreenIndex;  
  35.     }  
  36.     public ScrollLayout(Context context, AttributeSet attrs) {  
  37.         this(context, attrs, 0);  
  38.         // TODO Auto-generated constructor stub
  39.     }  
  40.     public ScrollLayout(Context context, AttributeSet attrs, int defStyle) {  
  41.         super(context, attrs, defStyle);  
  42.         // TODO Auto-generated constructor stub
  43.         mScroller = new Scroller(context);  
  44.         mCurScreen = mDefaultScreen;  
  45.         mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();  
  46.     }  
  47.     @Override
  48.     protectedvoid onLayout(boolean changed, int l, int t, int r, int b) {  
  49.         // TODO Auto-generated method stub
  50.         int childLeft = 0;  
  51.         finalint childCount = getChildCount();  
  52.         System.out.println("childCount=" + childCount);  
  53.         for (int i = 0; i < childCount; i++) {  
  54.             final View childView = getChildAt(i);  
  55.             if (childView.getVisibility() != View.GONE) {  
  56.                 finalint childWidth = childView.getMeasuredWidth();  
  57.                 childView.layout(childLeft, 0, childLeft + childWidth,  
  58.                         childView.getMeasuredHeight());  
  59.                 childLeft += childWidth;  
  60.             }  
  61.         }  
  62.     }  
  63.     @Override
  64.     protectedvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  65.         Log.e(TAG, "onMeasure");  
  66.         super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  67.         finalint width = MeasureSpec.getSize(widthMeasureSpec);  
  68.         finalint widthMode = MeasureSpec.getMode(widthMeasureSpec);  
  69.         if (widthMode != MeasureSpec.EXACTLY) {  
  70.             thrownew IllegalStateException(  
  71.                     "ScrollLayout only canmCurScreen run at EXACTLY mode!");  
  72.         }  
  73.         finalint heightMode = MeasureSpec.getMode(heightMeasureSpec);  
  74.         if (heightMode != MeasureSpec.EXACTLY) {  
  75.             thrownew IllegalStateException(  
  76.                     "ScrollLayout only can run at EXACTLY mode!");  
  77.         }  
  78.         // The children are given the same width and height as the scrollLayout
  79.         finalint count = getChildCount();  
  80.         for (int i = 0; i < count; i++) {  
  81.             getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);  
  82.         }  
  83.         System.out.println("moving to screen " + mCurScreen);  
  84.         scrollTo(mCurScreen * width, 0);  
  85.     }  
  86.     /** 
  87.      * According to the position of current layout scroll to the destination 
  88.      * page. 
  89.      */
  90.     publicvoid snapToDestination() {  
  91.         finalint screenWidth = getWidth();  
  92.         finalint destScreen = (getScrollX() + screenWidth / 2) / screenWidth;  
  93.         snapToScreen(destScreen);  
  94.     }  
  95.     publicvoid snapToScreen(int whichScreen) {  
  96.         // get the valid layout page
  97.         whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));  
  98.         if (getScrollX() != (whichScreen * getWidth())) {  
  99.             finalint delta = whichScreen * getWidth() - getScrollX();  
  100.             mScroller.startScroll(getScrollX(), 0, delta, 0,  
  101.                     Math.abs(delta) * 2);  
  102.             mCurScreen = whichScreen;  
  103.             invalidate(); // Redraw the layout
  104.         }  
  105.     }  
  106.     publicvoid setToScreen(int whichScreen) {  
  107.         whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));  
  108.         mCurScreen = whichScreen;  
  109.         scrollTo(whichScreen * getWidth(), 0);  
  110.     }  
  111.     publicint getCurScreen() {  
  112.         return mCurScreen;  
  113.     }  
  114.     @Override
  115.     publicvoid computeScroll() {  
  116.         // TODO Auto-generated method stub
  117.         if (mScroller.computeScrollOffset()) {  
  118.             scrollTo(mScroller.getCurrX(), mScroller.getCurrY());  
  119.             postInvalidate();  
  120.         }  
  121.     }  
  122.     @Override
  123.     publicboolean onTouchEvent(MotionEvent event) {  
  124.         // TODO Auto-generated method stub
  125.         if (mVelocityTracker == null) {  
  126.             mVelocityTracker = VelocityTracker.obtain();  
  127.         }  
  128.         mVelocityTracker.addMovement(event);  
  129.         finalint action = event.getAction();  
  130.         finalfloat x = event.getX();  
  131.         finalfloat y = event.getY();  
  132.         switch (action) {  
  133.         case MotionEvent.ACTION_DOWN:  
  134.             Log.e(TAG, "event down!");  
  135.             if (!mScroller.isFinished()) {  
  136.                 mScroller.abortAnimation();  
  137.             }  
  138.             mLastMotionX = x;  
  139.             break;  
  140.         case MotionEvent.ACTION_MOVE:  
  141.             int deltaX = (int) (mLastMotionX - x);  
  142.             mLastMotionX = x;  
  143.             scrollBy(deltaX, 0);  
  144.             break;  
  145.         case MotionEvent.ACTION_UP:  
  146.             Log.e(TAG, "event : up");  
  147.             // if (mTouchState == TOUCH_STATE_SCROLLING) {
  148.             final VelocityTracker velocityTracker = mVelocityTracker;  
  149.             velocityTracker.computeCurrentVelocity(1000);  
  150.             int velocityX = (int) velocityTracker.getXVelocity();  
  151.             Log.e(TAG, "velocityX:" + velocityX);  
  152.             if (velocityX > SNAP_VELOCITY && mCurScreen > 0) {  
  153.                 // Fling enough to move left
  154.                 Log.e(TAG, "snap left");  
  155.                 onScreenChangeListener.onScreenChange(mCurScreen - 1);  
  156.                 System.out.println("mCurScreen=" + (mCurScreen - 1));  
  157.                 snapToScreen(mCurScreen - 1);  
  158.             } elseif (velocityX < -SNAP_VELOCITY  
  159.                     && mCurScreen < getChildCount() - 1) {  
  160.                 // Fling enough to move right
  161.                 Log.e(TAG, "snap right");  
  162.                 onScreenChangeListener.onScreenChange(mCurScreen + 1);  
  163.                 //只往右移動才載入資料
  164.                 onScreenChangeListenerDataLoad.onScreenChange(mCurScreen+1);  
  165.                 snapToScreen(mCurScreen + 1);  
  166.             } else {  
  167.                 snapToDestination();  
  168.             }  
  169.             if (mVelocityTracker != null) {  
  170.                 mVelocityTracker.recycle();  
  171.                 mVelocityTracker = null;  
  172.             }  
  173.             // }
  174.             mTouchState = TOUCH_STATE_REST;  
  175.             break;  
  176.         case MotionEvent.ACTION_CANCEL:  
  177.             mTouchState = TOUCH_STATE_REST;  
  178.             break;  
  179.         }  
  180.         returntrue;  
  181.     }  
  182.     @Override
  183.     publicboolean onInterceptTouchEvent(MotionEvent ev) {  
  184.         // TODO Auto-generated method stub
  185.         Log.e(TAG, "onInterceptTouchEvent-slop:" + mTouchSlop);  
  186.         finalint action = ev.getAction();  
  187.         if ((action == MotionEvent.ACTION_MOVE)  
  188.                 && (mTouchState != TOUCH_STATE_REST)) {  
  189.             returntrue;  
  190.         }  
  191.         finalfloat x = ev.getX();  
  192.         finalfloat y = ev.getY();  
  193.         switch (action) {  
  194.         case MotionEvent.ACTION_MOVE:  
  195.             finalint xDiff = (int) Math.abs(mLastMotionX - x);  
  196.             if (xDiff > mTouchSlop) {  
  197.                 mTouchState = TOUCH_STATE_SCROLLING;  
  198.             }  
  199.             break;  
  200.         case MotionEvent.ACTION_DOWN:  
  201.             mLastMotionX = x;  
  202.             mLastMotionY = y;  
  203.             mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST  
  204.                     : TOUCH_STATE_SCROLLING;  
  205.             break;  
  206.         case MotionEvent.ACTION_CANCEL:  
  207.         case MotionEvent.ACTION_UP:  
  208.             mTouchState = TOUCH_STATE_REST;  
  209.             break;  
  210.         }  
  211.         return mTouchState != TOUCH_STATE_REST;  
  212.     }  
  213.     //分頁監聽
  214.     publicinterface OnScreenChangeListener {  
  215.         void onScreenChange(int currentIndex);  
  216.     }  
  217.     private OnScreenChangeListener onScreenChangeListener;  
  218.     publicvoid setOnScreenChangeListener(  
  219.             OnScreenChangeListener onScreenChangeListener) {  
  220.         this.onScreenChangeListener = onScreenChangeListener;  
  221.     }  
  222.     //動態資料監聽
  223.     publicinterface OnScreenChangeListenerDataLoad {  
  224.         void onScreenChange(int currentIndex);  
  225.     }  
  226.     private OnScreenChangeListenerDataLoad onScreenChangeListenerDataLoad;  
  227.     publicvoid setOnScreenChangeListenerDataLoad(OnScreenChangeListenerDataLoad onScreenChangeListenerDataLoad) {  
  228.         this.onScreenChangeListenerDataLoad = onScreenChangeListenerDataLoad;  
  229.     }  
  230. }  



main.xml
Xml程式碼  收藏程式碼
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7.     <TextViewandroid:layout_width="fill_parent"
  8.         android:layout_height="wrap_content"android:text="仿淘寶聚划算"/>
  9. <RelativeLayout
  10.     android:id="@+id/myView"
  11.     android:layout_width="fill_parent"
  12.     android:layout_height="fill_parent"
  13.     >
  14. <cn.anycall.ju.ScrollLayout
  15.   xmlns:android="http://schemas.android.com/apk/res/android"
  16.   android:id="@+id/ScrollLayoutTest"
  17.   android:layout_width="fill_parent"
  18.   android:layout_height="fill_parent"android:background="#000000">
  19. </cn.anycall.ju.ScrollLayout>
  20. <cn.anycall.ju.PageControlView
  21.                 android:id="@+id/pageControl"
  22.                 android:layout_width="fill_parent"
  23.                 android:layout_height="40px"
  24.                 android:background="#8f00000f"
  25.                 android:layout_alignParentBottom="true"
  26.                 android:gravity="center"/>
  27. </RelativeLayout>
  28. </LinearLayout>

app_item.xml
Xml程式碼  收藏程式碼
  1. <?xmlversion="1.0"

    相關推薦

    Android GridView 載入資料

    android UI 往右滑動,滑動到最後一頁就自動載入資料並顯示 如圖: Java程式碼   package cn.anycall.ju;  import java.util.ArrayList;  import

    面試問題之:Android中ListView載入資料

    熟悉Android的朋友們都知道,不管是微部落格戶端還是新聞客戶端,都離不開列表元件,可以說列表元件是Android資料展現方面最重要的元件,我們今天就要講一講列表元件ListView載入資料的相關內容。通常來說,一個應用在展現大量資料時,不會將全部的可用資料都呈現給

    android ListView 動態載入資料

     用ListView顯示資料時,列表中資料量大時,載入和處理時間會明顯變長,如果等到把所有資料都處理載入完成再顯示出來,那程式的UI就非常糟糕了,很可能會隨資料量的變大而變慢,這樣的介面很不友好,我們無法接受。  廢話說完了,那怎麼解決這個的問題呢?  動態載入,分頁載

    Android裡ListView載入資料

    當列表資料量大的時候我們一半都進行分頁,android裡分頁一半不同於PC端,第幾頁的方式,一般都是滑動到底部資料自帶載入,廢話不多數了直接看程式碼: ListActivity.java類: import java.util.ArrayList; import an

    android中listview載入資料

                   前段時間做的新浪微博專案一直想實現listview分頁載入資料,今天終於實現了,哈哈!感覺挺好的,今天又寫了個demo給大家分享下。               首先說下listview的優化方案,這也是面試中常考的題目。優化方案有三種:1,如

    【小程式】載入資料,下拉載入更多,上拉重新整理

    【 小程式】分頁載入資料,下拉載入更多,上拉重新整理 分頁載入的優點就不多說了,下面主要記錄一下幾個問題點。 scroll-view元件不能用在頁面根佈局中,不然觸發不了系統的onPullDownRefresh()、onReachBottom()回撥。 在Page頁

    小程式載入資料

    (({ data }) => { if (data.object && data.object.list && data.object.list.length) { let list = data.object.list; fo

    android ListView載入

    package com.example.administrator.datapageload; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; imp

    listview實現載入資料的注意點

    /**  * 未讀資訊list  */ public class MessageSecondLayerActivity extends Activity implements View.OnClickListener {     private ListView listView;     private L

    微信小程式載入資料

    在使用類似qq,微博或者新聞類等資料量大的應用經常會遇到分頁載入功能,它不僅的應用場景廣,還能挺高使用者體驗。微信小程式中也可以分頁載入資料,這篇文章就是介紹。要實現這樣的功能,一般需要在請求資料時加入當前請求頁數,以及頁的大小(每頁顯示的數量)也有一部分介面是通過請求的開始

    Adapter之大資料滑動效率優化和載入資料

             在Android中如果要做到大資料分頁載入則需要我們的Activity實現OnScrollListener滾動條監聽介面。當如果要做的更加高大上。比如需要在使用者滑動至列表的底部,觸碰摸個區域,則需要實現OnTouchListener介面,等等。    

    微信小程式ajax請求載入資料

    分頁載入功能大家遇到的應該會經常遇到,應用場景也很多,例如微博,QQ,微信朋友圈以及新聞類應用,都會有分頁載入的功能,這不僅節省了我們使用者的流量,還提升了使用者體驗。那麼今天的這篇文章就是介紹微信小程式中如何實現分頁載入的功能。照例先上原始碼及效果圖。原始碼傳送門要實現這樣的功能,一般需要在請求資料時加入當

    js滾動載入資料

    實現理念: 1.判斷滾動條到底部觸發載入函式 2.請求資料 3.追加資料 html: <div class="list_flex" id="listrow"> <a href="./index.php?i=3&c=entry&m=ewei_

    ANDROID GridView 平滑滑動 效果的實現(基於android TV遙控器操作)

    1.android 使用GridView 實現載入大量的資料顯示。未顯示出來的資料可以滑動螢幕讓底部的資料顯示出來,但是原生態的GridView 並沒有很美觀平滑的一個動畫來滾動資料,因此,我們可以稍做修改就可以實現 類似VST全聚合裡面 視訊載入也那樣的翻頁動畫效果了。

    jquery 滾動條載入資料

    廢話不多說  直接擼 1.引入兩個js檔案,必須jquery第一個 <script src="jquery.min.js"/> <script src="jquery.infinit

    手機端滾動載入資料模型

    說明:執行demo的時候請將瀏覽器模式調整到蘋果5 <!DOCTYPE html> <html lang="en"> <head> <meta

    Android自定義控制元件(一) 下拉重新整理,上拉載入更多(支援ListView, GridView, ScrollView)

            首先說明,這幾篇文章是對一些前輩的成果進行學習後的心得總結。也借這種方式對他們表示謝意。         最近專案中好幾個模組都用到listview和gridview的下拉重新整理,上拉載入更多等功能,而且涉及到圖片的批量下載。水平有限,首先是想到找一些比較

    ListView載入,動態從網上拉取資料

    最近做專案有個需求: (1)從網上獲取分頁資料; (2)在Android手機端顯示; (3)載入的動畫和文字; (4)資料超過40條時顯示滑動條等。 由於之前自己做的偏底層一點,所以這塊內容琢磨了蠻久,最後可以完美實現專案需求,內容見下面: 一、首先,需要有個佈局

    ListView 載入網路資料

    1.分頁載入思路 (1)判斷是否滑動到底部 (2)當滑動到底部,往資料來源中新增資料,然後呼叫adapter.notifyDataSetChanged()方法重新整理顯示的listView資料。 2. 下面是糗事百科載入的例項,載入效果如下(為了顯示效

    listView下拉重新整理,載入(無更多資料時新增底線)

    package com.example.yjyg.mytourismnote.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.suppo