zoukankan      html  css  js  c++  java
  • (转)android中ListView在划屏到底部的时候动态添加ListView的Item实现

    ListView中我们可以添加我们自己的adpter,这样 我们可以丰富我们的ListView的Item,并且如果我们的ListView很长的时候。如果一下子都显示出来的话,那么我们要通过划屏滚动很长时间 才能看到我们要的数据(我们的数据如果在最下边),有时候我们的数据就在前几行,那么我们有必要把全部数据都显示在ListView中么?如果我们的数据 是从网络获取,或者通过开的线程,耗时性很长的操作才能返回数据的呢?这就要求我们在没有全部加载必要的情况下部分加载ListView中的内容,通过 activity实现OnScrollListener这个接口我们可是在划屏到最底下的时候设置加载来实现动态的添加ListView中的数据。

    很简单的例子,通过ListView显示出我们的android手机中都安装了哪些的应用,然后返回。通过浏览到最底部的时候触发OnScrollListener事件,我们就会把更多的应用添加到ListView中去。

    直接看代码:

    Java代码  收藏代码
    1. package com.jftt.listviewupdate;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5.   
    6. import android.app.Activity;  
    7. import android.app.AlertDialog;  
    8. import android.content.DialogInterface;  
    9. import android.content.pm.ApplicationInfo;  
    10. import android.content.pm.PackageInfo;  
    11. import android.content.pm.PackageManager;  
    12. import android.content.pm.PackageManager.NameNotFoundException;  
    13. import android.os.Bundle;  
    14. import android.os.Handler;  
    15. import android.os.Message;  
    16. import android.view.View;  
    17. import android.widget.AbsListView;  
    18. import android.widget.AdapterView;  
    19. import android.widget.LinearLayout;  
    20. import android.widget.ListView;  
    21. import android.widget.Toast;  
    22. import android.widget.AbsListView.OnScrollListener;  
    23. import android.widget.AdapterView.OnItemClickListener;  
    24.   
    25. public class ListViewUpdate extends Activity implements OnScrollListener,  
    26.         OnItemClickListener {  
    27.     private List<ApplicationItemInfo> applicationItemInfoList;  
    28.     private List<ApplicationItemInfo> applicationItemInfoListTemp;  
    29.     private ApplicationItemAdapter applicationItemAdapter;  
    30.     private Handler handler;  
    31.   
    32.     private ListView listView;  
    33.   
    34.     private LinearLayout loading;  
    35.     private boolean refreshable;  
    36.   
    37.     @Override  
    38.     public void onCreate(Bundle savedInstanceState) {  
    39.         super.onCreate(savedInstanceState);  
    40.         init();  
    41.         updateApplicationItemInfoList();  
    42.     }  
    43.   
    44.     private void init() {  
    45.         setContentView(R.layout.main);  
    46.         listView = (ListView) findViewById(R.id.list);  
    47.         loading = (LinearLayout) findViewById(R.id.loading);  
    48.   
    49.         applicationItemInfoList = new ArrayList<ApplicationItemInfo>();  
    50.         applicationItemAdapter = new ApplicationItemAdapter(this,  
    51.                 applicationItemInfoList);  
    52.         handler = createHandler();  
    53.         refreshable = true;  
    54.   
    55.         listView.setAdapter(applicationItemAdapter);  
    56.         listView.setOnItemClickListener(this);  
    57.         listView.setOnScrollListener(this);  
    58.     }  
    59.   
    60.     private Handler createHandler() {  
    61.         Handler handler = new Handler() {  
    62.             @Override  
    63.             public void handleMessage(Message msg) {  
    64.                 super.handleMessage(msg);  
    65.                 switch (msg.what) {  
    66.                 case 1:  
    67.                     if (applicationItemInfoListTemp != null) {  
    68.                         ListViewUpdate.this.applicationItemInfoList  
    69.                                 .addAll(applicationItemInfoListTemp);  
    70.                         ListViewUpdate.this.applicationItemAdapter  
    71.                                 .notifyDataSetChanged();  
    72.                         ListViewUpdate.this.loading.setVisibility(View.GONE);  
    73.                         ListViewUpdate.this.refreshable = true;  
    74.                     } else {  
    75.                         ListViewUpdate.this.loading.setVisibility(View.GONE);  
    76.                         Toast.makeText(ListViewUpdate.this,  
    77.                                 "All of applications have been shown!",  
    78.                                 Toast.LENGTH_LONG).show();  
    79.                     }  
    80.                     break;  
    81.                 default:  
    82.                     break;  
    83.                 }  
    84.             }  
    85.         };  
    86.         return handler;  
    87.     }  
    88.   
    89.     public Handler getHandler() {  
    90.         return handler;  
    91.     }  
    92.   
    93.     private void updateApplicationItemInfoList() {  
    94.         new Thread(new Runnable() {  
    95.   
    96.             @Override  
    97.             public void run() {  
    98.                 if (ListViewUpdate.this.applicationItemInfoList.size() < 80) {  
    99.                     ListViewUpdate.this.applicationItemInfoListTemp = ListViewUpdate.this  
    100.                             .getLocalApplicationInfo();  
    101.                 } else {  
    102.                     ListViewUpdate.this.applicationItemInfoListTemp = null;  
    103.                 }  
    104.   
    105.                 try {  
    106.                     Thread.sleep(5000);  
    107.                 } catch (InterruptedException e) {  
    108.                     e.printStackTrace();  
    109.                 }  
    110.   
    111.                 Message message = new Message();  
    112.                 message.what = 1;  
    113.                 ListViewUpdate.this.getHandler().sendMessage(message);  
    114.             }  
    115.   
    116.         }).start();  
    117.     }  
    118.   
    119.     private ArrayList<ApplicationItemInfo> getLocalApplicationInfo() {  
    120.   
    121.         PackageManager packageManager = this.getPackageManager();  
    122.         ArrayList<ApplicationItemInfo> applicationItemInfoList = new ArrayList<ApplicationItemInfo>();  
    123.         List<PackageInfo> packageInfoList = packageManager  
    124.                 .getInstalledPackages(0);  
    125.   
    126.         for (int i = packageInfoList.size(); i > 0; i--) {  
    127.   
    128.             ApplicationInfo applicationInfo = packageInfoList.get(i - 1).applicationInfo;  
    129.   
    130.             if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {  
    131.                 try {  
    132.                     ApplicationItemInfo applicationItemInfo = new ApplicationItemInfo();  
    133.   
    134.                     String packageName = packageInfoList.get(i - 1).packageName;  
    135.                     String[] permissions = packageManager.getPackageInfo(  
    136.                             packageName, PackageManager.GET_PERMISSIONS).requestedPermissions;  
    137.   
    138.                     applicationItemInfo.setPackageName(packageName);  
    139.                     applicationItemInfo.setPermissions(permissions);  
    140.   
    141.                     applicationItemInfo.setIcon(packageManager  
    142.                             .getApplicationIcon(applicationInfo));  
    143.                     applicationItemInfo.setName(packageManager  
    144.                             .getApplicationLabel(applicationInfo).toString());  
    145.   
    146.                     applicationItemInfoList.add(applicationItemInfo);  
    147.   
    148.                 } catch (NameNotFoundException e) {  
    149.                     // TODO Auto-generated catch block  
    150.                 }  
    151.             }  
    152.         }  
    153.         if ((!applicationItemInfoList.isEmpty())  
    154.                 && (applicationItemInfoList.size() < 10)) {  
    155.             for (int i = applicationItemInfoList.size(); i < 10; i++) {  
    156.                 applicationItemInfoList.add(applicationItemInfoList.get(9 - i));  
    157.             }  
    158.         }  
    159.         return applicationItemInfoList;  
    160.     }  
    161.   
    162.     @Override  
    163.     public void onScroll(AbsListView view, int firstVisibleItem,  
    164.             int visibleItemCount, int totalItemCount) {  
    165.         // TODO Auto-generated method stub  
    166.         if ((firstVisibleItem + visibleItemCount == totalItemCount)  
    167.                 && (totalItemCount != 0)) {  
    168.             if (refreshable) {  
    169.                 refreshable = false;  
    170.                 loading.setVisibility(View.VISIBLE);  
    171.                 updateApplicationItemInfoList();  
    172.             }  
    173.         }  
    174.     }  
    175.   
    176.     @Override  
    177.     public void onScrollStateChanged(AbsListView view, int scrollState) {  
    178.         // TODO Auto-generated method stub  
    179.   
    180.     }  
    181.   
    182.     @Override  
    183.     public void onItemClick(AdapterView<?> arg0, View view, int position,  
    184.             long id) {  
    185.         // TODO Auto-generated method stub  
    186.         AlertDialog.Builder permissionDialog = new AlertDialog.Builder(this);  
    187.         permissionDialog.setIcon(applicationItemInfoList.get(position)  
    188.                 .getIcon());  
    189.         permissionDialog.setTitle(applicationItemInfoList.get(position)  
    190.                 .getName());  
    191.         String[] permissions = applicationItemInfoList.get(position)  
    192.                 .getPermissions();  
    193.   
    194.         StringBuffer temp = new StringBuffer();  
    195.         if (permissions != null) {  
    196.             for (int i = 0; i < permissions.length; i++) {  
    197.                 temp.append(permissions[i]);  
    198.                 temp.append("\n");  
    199.             }  
    200.         } else {  
    201.             temp.append("permission is null");  
    202.         }  
    203.         permissionDialog.setMessage(temp.toString());  
    204.         permissionDialog.setPositiveButton("OK",  
    205.                 new DialogInterface.OnClickListener() {  
    206.   
    207.                     @Override  
    208.                     public void onClick(DialogInterface dialog, int which) {  
    209.                         // TODO Auto-generated method stub  
    210.                         dialog.cancel();  
    211.                     }  
    212.                 });  
    213.         permissionDialog.create().show();  
    214.     }  
    215. }  
    Java代码  收藏代码
    1. package com.jftt.listviewupdate;  
    2.   
    3. import java.util.List;  
    4.   
    5. import android.content.Context;  
    6. import android.view.LayoutInflater;  
    7. import android.view.View;  
    8. import android.view.ViewGroup;  
    9. import android.widget.BaseAdapter;  
    10. import android.widget.ImageView;  
    11. import android.widget.TextView;  
    12.   
    13. public class ApplicationItemAdapter extends BaseAdapter {  
    14.   
    15.     private LayoutInflater layoutInflater;  
    16.     private List<ApplicationItemInfo> applicationItemInfoList;  
    17.   
    18.     public ApplicationItemAdapter(Context context,  
    19.             List<ApplicationItemInfo> applicationItemInfoList) {  
    20.   
    21.         this.applicationItemInfoList = applicationItemInfoList;  
    22.         layoutInflater = LayoutInflater.from(context);  
    23.   
    24.     }  
    25.   
    26.     @Override  
    27.     public int getCount() {  
    28.         // TODO Auto-generated method stub  
    29.         return applicationItemInfoList.size();  
    30.     }  
    31.   
    32.     @Override  
    33.     public Object getItem(int position) {  
    34.         // TODO Auto-generated method stub  
    35.         return applicationItemInfoList.get(position);  
    36.     }  
    37.   
    38.     @Override  
    39.     public long getItemId(int position) {  
    40.         // TODO Auto-generated method stub  
    41.         return position;  
    42.     }  
    43.   
    44.     @Override  
    45.     public View getView(int position, View view, ViewGroup viewGroup) {  
    46.   
    47.         ViewHolder viewHolder;  
    48.   
    49.         // TODO Auto-generated method stub  
    50.         if (view == null) {  
    51.             view = layoutInflater.inflate(R.layout.application_item, null);  
    52.             viewHolder = new ViewHolder();  
    53.             viewHolder.icon = (ImageView) view.findViewById(R.id.icon);  
    54.             viewHolder.title = (TextView) view.findViewById(R.id.title);  
    55.             viewHolder.packageName = (TextView) view  
    56.                     .findViewById(R.id.packagename);  
    57.             view.setTag(viewHolder);  
    58.         } else {  
    59.             viewHolder = (ViewHolder) view.getTag();  
    60.         }  
    61.   
    62.         viewHolder.icon.setImageDrawable(applicationItemInfoList.get(position)  
    63.                 .getIcon());  
    64.         viewHolder.title.setText(applicationItemInfoList.get(position)  
    65.                 .getName());  
    66.         viewHolder.packageName.setText(applicationItemInfoList.get(position)  
    67.                 .getPackageName());  
    68.   
    69.         return view;  
    70.     }  
    71.   
    72.     private class ViewHolder {  
    73.         ImageView icon;  
    74.         TextView title;  
    75.         TextView packageName;  
    76.     }  
    77.   
    78. }  
    Java代码  收藏代码
    1. package com.jftt.listviewupdate;  
    2.   
    3. import java.io.Serializable;  
    4.   
    5. import android.graphics.drawable.Drawable;  
    6.   
    7. public class ApplicationItemInfo implements Serializable {  
    8.   
    9.     private static final long serialVersionUID = -738265888959292655L;  
    10.   
    11.     private Drawable icon;  
    12.   
    13.     private String packageName;  
    14.   
    15.     private String name;  
    16.   
    17.     private String[] permissions;  
    18.   
    19.     public Drawable getIcon() {  
    20.         return icon;  
    21.     }  
    22.   
    23.     public void setIcon(Drawable icon) {  
    24.         this.icon = icon;  
    25.     }  
    26.   
    27.     public String getPackageName() {  
    28.         return packageName;  
    29.     }  
    30.   
    31.     public void setPackageName(String packageName) {  
    32.         this.packageName = packageName;  
    33.     }  
    34.   
    35.     public String getName() {  
    36.         return name;  
    37.     }  
    38.   
    39.     public void setName(String name) {  
    40.         this.name = name;  
    41.     }  
    42.   
    43.     public String[] getPermissions() {  
    44.         return permissions;  
    45.     }  
    46.   
    47.     public void setPermissions(String[] permissions) {  
    48.         this.permissions = permissions;  
    49.     }  
    50.   
    51. }  
  • 相关阅读:
    K8s--09 编写mysql的持久化deployment
    K8s--08 prometheus监控
    K8s--07 configMap资源
    K8s--06 K8s数据持久化
    k8S--05 K8s控制器类型
    k8s--04 部署harbor作为k8s镜像仓库
    K8s--03 资源类型
    K8s--02 K8S部署
    K8s--01 Kubernetes简介
    video2gift环境安装(Theano等)
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2527971.html
Copyright © 2011-2022 走看看