Android UI滑动加载源码
16lz
2021-01-23
android UI 往右滑动,滑动到最后一页就自动加载数据并显示
如图:
Java代码
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(); } } } }Java代码
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; } }
转载:http://www.adobex.com/android/source/details/00000151.htm
更多相关文章
- Android使用Intent传输数据
- Android功能代码
- android中如何通过jni调用c,c++代码
- Android中通过代码修改bitmap的宽高
- android判断设备是否有相机的实例代码
- Android sqlite数据库存取图片信息
- Android防火墙+流量统计代码
- Android图片缩放、圆角处理以及倒影特效代码