ListView 分段加载数据
ListView listView = getListView(); //添加到脚页显示 这个要继承ListActivity 实现OnScrollListener listView.addFooterView(loadingLayout);
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/