android UI 往右滑动,滑动到最后一页就自动加载数据并显示 如图: package cn.anycall.ju;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.Toast; import cn.anycall.ju.ScrollLayout.OnScreenChangeListenerDataLoad; /** * GridView分页显示安装的应用程序 */ public class AllAppList extends Activity { private ScrollLayout mScrollLayout; private static final float APP_PAGE_SIZE = 4.0f; private Context mContext; private PageControlView pageControl; public MyHandler myHandler; public int n=0; private DataLoading dataLoad; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); mContext = this; setContentView(R.layout.main); dataLoad = new DataLoading(); mScrollLayout = (ScrollLayout)findViewById(R.id.ScrollLayoutTest); myHandler = new MyHandler(this,1); //起一个线程更新数据 MyThread m = new MyThread(); new Thread(m).start(); } /** * gridView 的onItemLick响应事件 */ public OnItemClickListener listener = new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub System.out.println("position="+position); } }; @Override protected void onDestroy() { // TODO Auto-generated method stub android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK) { finish(); return true; } return super.onKeyDown(keyCode, event); } // 更新后台数据 class MyThread implements Runnable { public void run() { try { Thread.sleep(1000*3); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } String msglist = "1"; Message msg = new Message(); Bundle b = new Bundle();// 存放数据 b.putString("rmsg", msglist); msg.setData(b); AllAppList.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI } } class MyHandler extends Handler { private AllAppList mContext; public MyHandler(Context conn,int a) { mContext = (AllAppList)conn; } public MyHandler(Looper L) { super(L); } // 子类必须重写此方法,接受数据 @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); Bundle b = msg.getData(); String rmsg = b.getString("rmsg"); if ("1".equals(rmsg)) { // do nothing List<Map> list = new ArrayList<Map>(); for(int i =0;i<16;i++){ n++; Map map = new HashMap(); map.put("name", n); list.add(map); } int pageNo = (int)Math.ceil( list.size()/APP_PAGE_SIZE); for (int i = 0; i < pageNo; i++) { GridView appPage = new GridView(mContext); // get the "i" page data appPage.setAdapter(new AppAdapter(mContext, list, i)); appPage.setNumColumns(2); appPage.setOnItemClickListener(listener); mScrollLayout.addView(appPage); } //加载分页 pageControl = (PageControlView) findViewById(R.id.pageControl); pageControl.bindScrollViewGroup(mScrollLayout); //加载分页数据 dataLoad.bindScrollViewGroup(mScrollLayout); } } } //分页数据 class DataLoading { private int count; public void bindScrollViewGroup(ScrollLayout scrollViewGroup) { this.count=scrollViewGroup.getChildCount(); scrollViewGroup.setOnScreenChangeListenerDataLoad(new OnScreenChangeListenerDataLoad() { public void onScreenChange(int currentIndex) { // TODO Auto-generated method stub generatePageControl(currentIndex); } }); } private void generatePageControl(int currentIndex){ //如果到最后一页,就加载16条记录 if(count==currentIndex+1){ MyThread m = new MyThread(); new Thread(m).start(); } } } } package cn.anycall.ju;
import java.util.ArrayList; import java.util.List; import java.util.Map;
import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView;
import cn.anycall.ju.R;
public class AppAdapter extends BaseAdapter { private List<Map> mList; private Context mContext; public static final int APP_PAGE_SIZE = 4; private PackageManager pm;
public AppAdapter(Context context, List<Map> list, int page) { mContext = context; pm = context.getPackageManager();
mList = new ArrayList<Map>(); int i = page * APP_PAGE_SIZE; int iEnd = i+APP_PAGE_SIZE; while ((i<list.size()) && (i<iEnd)) { mList.add(list.get(i)); i++; } } public int getCount() { // TODO Auto-generated method stub return mList.size(); }
public Object getItem(int position) { // TODO Auto-generated method stub return mList.get(position); }
public long getItemId(int position) { // TODO Auto-generated method stub return position; }
public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub Map appInfo = mList.get(position); AppItem appItem; if (convertView == null) { View v = LayoutInflater.from(mContext).inflate(R.layout.app_item, null);
appItem = new AppItem(); appItem.mAppIcon = (ImageView)v.findViewById(R.id.imgdetail); appItem.mAppName = (TextView)v.findViewById(R.id.tuaninfo);
v.setTag(appItem); convertView = v; } else { appItem = (AppItem)convertView.getTag(); } // set the icon appItem.mAppIcon.setImageResource(R.drawable.icon); // set the app name appItem.mAppName.setText(appInfo.get("name").toString());
return convertView; }
/** * 每个应用显示的内容,包括图标和名称 * @author Yao.GUET * */ class AppItem { ImageView mAppIcon; TextView mAppName; } }
package cn.anycall.ju; import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.LinearLayout; import cn.anycall.ju.R; import cn.anycall.ju.ScrollLayout.OnScreenChangeListener;
public class PageControlView extends LinearLayout { private Context context;
private int count;
public void bindScrollViewGroup(ScrollLayout scrollViewGroup) { this.count=scrollViewGroup.getChildCount(); System.out.println("count="+count); generatePageControl(scrollViewGroup.getCurrentScreenIndex());
scrollViewGroup.setOnScreenChangeListener(new OnScreenChangeListener() {
public void onScreenChange(int currentIndex) { // TODO Auto-generated method stub generatePageControl(currentIndex); } }); }
public PageControlView(Context context) { super(context); this.init(context); } public PageControlView(Context context, AttributeSet attrs) { super(context, attrs); this.init(context); }
private void init(Context context) { this.context=context; }
private void generatePageControl(int currentIndex) { this.removeAllViews();
int pageNum = 6; // 显示多少个 int pageNo = currentIndex+1; //第几页 int pageSum = this.count; //总共多少页
if(pageSum>1){ int currentNum = (pageNo % pageNum == 0 ? (pageNo / pageNum) - 1 : (int) (pageNo / pageNum)) * pageNum;
if (currentNum < 0) currentNum = 0;
if (pageNo > pageNum){ ImageView imageView = new ImageView(context); imageView.setImageResource(R.drawable.zuo); this.addView(imageView); }
for (int i = 0; i < pageNum; i++) { if ((currentNum + i + 1) > pageSum || pageSum < 2) break;
ImageView imageView = new ImageView(context); if(currentNum + i + 1 == pageNo){ imageView.setImageResource(R.drawable.page_indicator_focused); }else{ imageView.setImageResource(R.drawable.page_indicator); } this.addView(imageView); }
if (pageSum > (currentNum + pageNum)) { ImageView imageView = new ImageView(context); imageView.setImageResource(R.drawable.you); this.addView(imageView); } } } } package cn.anycall.ju;
import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.LinearLayout; import cn.anycall.ju.R; import cn.anycall.ju.ScrollLayout.OnScreenChangeListener;
public class PageControlView extends LinearLayout { private Context context;
private int count;
public void bindScrollViewGroup(ScrollLayout scrollViewGroup) { this.count=scrollViewGroup.getChildCount(); System.out.println("count="+count); generatePageControl(scrollViewGroup.getCurrentScreenIndex());
scrollViewGroup.setOnScreenChangeListener(new OnScreenChangeListener() {
public void onScreenChange(int currentIndex) { // TODO Auto-generated method stub generatePageControl(currentIndex); } }); }
public PageControlView(Context context) { super(context); this.init(context); } public PageControlView(Context context, AttributeSet attrs) { super(context, attrs); this.init(context); }
private void init(Context context) { this.context=context; }
private void generatePageControl(int currentIndex) { this.removeAllViews();
int pageNum = 6; // 显示多少个 int pageNo = currentIndex+1; //第几页 int pageSum = this.count; //总共多少页
if(pageSum>1){ int currentNum = (pageNo % pageNum == 0 ? (pageNo / pageNum) - 1 : (int) (pageNo / pageNum)) * pageNum;
if (currentNum < 0) currentNum = 0;
if (pageNo > pageNum){ ImageView imageView = new ImageView(context); imageView.setImageResource(R.drawable.zuo); this.addView(imageView); }
for (int i = 0; i < pageNum; i++) { if ((currentNum + i + 1) > pageSum || pageSum < 2) break;
ImageView imageView = new ImageView(context); if(currentNum + i + 1 == pageNo){ imageView.setImageResource(R.drawable.page_indicator_focused); }else{ imageView.setImageResource(R.drawable.page_indicator); } this.addView(imageView); }
if (pageSum > (currentNum + pageNum)) { ImageView imageView = new ImageView(context); imageView.setImageResource(R.drawable.you); this.addView(imageView); } } } } main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas./apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="仿淘宝聚划算"/> <RelativeLayout android:id="@+id/myView" android:layout_width="fill_parent" android:layout_height="fill_parent" > <cn.anycall.ju.ScrollLayout xmlns:android="http://schemas./apk/res/android" android:id="@+id/ScrollLayoutTest" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000000" > </cn.anycall.ju.ScrollLayout>
<cn.anycall.ju.PageControlView android:id="@+id/pageControl" android:layout_width="fill_parent" android:layout_height="40px" android:background="#8f00000f" android:layout_alignParentBottom="true" android:gravity="center"/> </RelativeLayout> </LinearLayout>
app_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas./apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <RelativeLayout android:id="@+id/alllayout" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RelativeLayout android:id="@+id/imglayout" android:layout_width="160dp" android:layout_height="160dp" android:background="@drawable/mer_border"> <ImageView android:id="@+id/imgdetail" android:layout_width="145dp" android:layout_height="145dp" android:layout_margin="8dp" /> <TextView android:id="@+id/price" android:layout_width="180dp" android:layout_height="wrap_content" android:text="12345" android:layout_alignParentBottom="true" android:background="#C02000" android:textColor="#FFFFFF"/> <TextView android:id="@+id/look" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="去看看" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:background="#C02000" android:textColor="#FFFFFF"/> </RelativeLayout> <TextView android:id="@+id/tuaninfo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="16dp" android:maxLines="2" android:layout_below="@id/imglayout" android:ellipsize="end" android:text="dddddddddd"/>" </RelativeLayout> |
|