- 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();
- }
- }