zoukankan      html  css  js  c++  java
  • ListView 分段加载数据


    ListView listView = getListView();
    //添加到脚页显示  这个要继承ListActivity 实现OnScrollListener
    listView.addFooterView(loadingLayout);


    这位兄弟的Demo非常不错.
    public class ListViewUpdate extends Activity implements OnScrollListener,
    		OnItemClickListener {
    
    	private List<ApplicationItemInfo> applicationItemInfoList;
    
    	private List<ApplicationItemInfo> applicationItemInfoListTemp;
    
    	private ApplicationItemAdapter applicationItemAdapter;
    
    	private ListView listView;
    
    	private LinearLayout loading;
    
    	private Handler handler;
    
    	private boolean refreshable;
    
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		init();
    		updateApplicationItemInfoList();
    	}
    
    	private void init() {
    		setContentView(R.layout.main);
    		listView = (ListView) findViewById(R.id.list);
    		loading = (LinearLayout) findViewById(R.id.loading);
    
    		applicationItemInfoList = new ArrayList<ApplicationItemInfo>();
    		applicationItemAdapter = new ApplicationItemAdapter(this,
    				applicationItemInfoList);
    		handler = createHandler();
    		refreshable = true;
    
    		listView.setAdapter(applicationItemAdapter);
    		listView.setOnItemClickListener(this);
    		listView.setOnScrollListener(this);
    	}
    
    	private Handler createHandler() {
    		Handler handler = new Handler() {
    
    			@Override
    			public void handleMessage(Message msg) {
    				// TODO Auto-generated method stub
    				super.handleMessage(msg);
    				switch (msg.what) {
    				case 1:
    					if (applicationItemInfoListTemp != null) {
    						ListViewUpdate.this.applicationItemInfoList
    								.addAll(applicationItemInfoListTemp);
    						ListViewUpdate.this.applicationItemAdapter
    								.notifyDataSetChanged();
    						ListViewUpdate.this.loading
    								.setVisibility(View.GONE);
    						ListViewUpdate.this.refreshable = true;
    					} else {
    						ListViewUpdate.this.loading
    								.setVisibility(View.GONE);
    						Toast.makeText(ListViewUpdate.this,
    								"All of applications have been shown!",
    								Toast.LENGTH_LONG).show();
    					}
    					break;
    				default:
    					break;
    				}
    			}
    		};
    		return handler;
    	}
    
    	public Handler getHandler() {
    		return handler;
    	}
    
    	private void updateApplicationItemInfoList() {
    		new Thread(new Runnable() {
    
    			@Override
    			public void run() {
    				// TODO Auto-generated method stub
    
    				if (ListViewUpdate.this.applicationItemInfoList.size() < 80) {
    					ListViewUpdate.this.applicationItemInfoListTemp = ListViewUpdate.this
    							.getLocalApplicationInfo();
    				} else {
    					ListViewUpdate.this.applicationItemInfoListTemp = null;
    				}
    
    				try {
    					Thread.sleep(5000);
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    
    				Message message = new Message();
    				message.what = 1;
    				ListViewUpdate.this.getHandler().sendMessage(message);
    			}
    
    		}).start();
    	}
    
    	private ArrayList<ApplicationItemInfo> getLocalApplicationInfo() {
    
    		PackageManager packageManager = this.getPackageManager();
    		ArrayList<ApplicationItemInfo> applicationItemInfoList = new ArrayList<ApplicationItemInfo>();
    		List<PackageInfo> packageInfoList = packageManager
    				.getInstalledPackages(0);
    
    		for (int i = packageInfoList.size(); i > 0; i--) {
    
    			ApplicationInfo applicationInfo = packageInfoList.get(i - 1).applicationInfo;
    
    			if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
    				try {
    					ApplicationItemInfo applicationItemInfo = new ApplicationItemInfo();
    
    					String packageName = packageInfoList.get(i - 1).packageName;
    					String[] permissions = packageManager.getPackageInfo(
    							packageName, PackageManager.GET_PERMISSIONS).requestedPermissions;
    
    					applicationItemInfo.setPackageName(packageName);
    					applicationItemInfo.setPermissions(permissions);
    
    					applicationItemInfo.setIcon(packageManager
    							.getApplicationIcon(applicationInfo));
    					applicationItemInfo.setName(packageManager
    							.getApplicationLabel(applicationInfo).toString());
    
    					applicationItemInfoList.add(applicationItemInfo);
    
    				} catch (NameNotFoundException e) {
    					// TODO Auto-generated catch block
    				}
    			}
    		}
    		if ((!applicationItemInfoList.isEmpty())
    				&& (applicationItemInfoList.size() < 10)) {
    			for (int i = applicationItemInfoList.size(); i < 10; i++) {
    				applicationItemInfoList.add(applicationItemInfoList.get(9 - i));
    			}
    		}
    		return applicationItemInfoList;
    	}
    
    	@Override
    	public void onScroll(AbsListView view, int firstVisibleItem,
    			int visibleItemCount, int totalItemCount) {
    		// TODO Auto-generated method stub
    		if ((firstVisibleItem + visibleItemCount == totalItemCount)
    				&& (totalItemCount != 0)) {
    			if (refreshable) {
    				refreshable = false;
    				loading.setVisibility(View.VISIBLE);
    				updateApplicationItemInfoList();
    			}
    		}
    	}
    
    	@Override
    	public void onScrollStateChanged(AbsListView view, int scrollState) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void onItemClick(AdapterView<?> arg0, View view, int position,
    			long id) {
    		// TODO Auto-generated method stub
    		AlertDialog.Builder permissionDialog = new AlertDialog.Builder(this);
    		permissionDialog.setIcon(applicationItemInfoList.get(position)
    				.getIcon());
    		permissionDialog.setTitle(applicationItemInfoList.get(position)
    				.getName());
    		String[] permissions = applicationItemInfoList.get(position)
    				.getPermissions();
    
    		StringBuffer temp = new StringBuffer();
    		if (permissions != null) {
    			for (int i = 0; i < permissions.length; i++) {
    				temp.append(permissions[i]);
    				temp.append("\n");
    			}
    		} else {
    			temp.append("permission is null");
    		}
    		permissionDialog.setMessage(temp.toString());
    		permissionDialog.setPositiveButton("OK",
    				new DialogInterface.OnClickListener() {
    
    					@Override
    					public void onClick(DialogInterface dialog, int which) {
    						// TODO Auto-generated method stub
    						dialog.cancel();
    					}
    				});
    		permissionDialog.create().show();
    	}
    }



    ---------------------------------------------------------------------------------------------------------------------------------
    copyright:http://www.cnblogs.com/anee/
  • 相关阅读:
    解构赋值用在函数参数默认值中的一些情况
    obaa源码加注
    omi-mp-create源码加注
    小程序表情选择器
    小程序QQ版表情解析组件
    用TamperMonkey去掉cdsn中的广告
    小程序自定义tabbar
    Python基础入门——安装与运行
    LaTeX安装与入门
    Java 运行环境安装
  • 原文地址:https://www.cnblogs.com/anee/p/2675790.html
Copyright © 2011-2022 走看看