- 浏览: 1096219 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
baiyi168:
非常有用,多谢楼主
Android中的一个TextView中的字体设置不同大小 -
qq271629261:
[img] ...
android开发工具 Eclipse+Android SDK+ADT -
txlong_onz:
haotainan 写道Activity伪造Dialog,这个 ...
Activity伪造Dialog的时候不能全屏显示 -
haotainan:
Activity伪造Dialog,这个Dialog显示的时候界 ...
Activity伪造Dialog的时候不能全屏显示 -
gangbener:
cainingyouyou 写道7楼的,tag,怎么解决的啊1 ...
android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
ListView中我们可以添加我们自己的adpter,这样我们可以丰富我们的ListView的Item,并且如果我们的ListView很长的时候。如果一下子都显示出来的话,那么我们要通过划屏滚动很长时间才能看到我们要的数据(我们的数据如果在最下边),有时候我们的数据就在前几行,那么我们有必要把全部数据都显示在ListView中么?如果我们的数据是从网络获取,或者通过开的线程,耗时性很长的操作才能返回数据的呢?这就要求我们在没有全部加载必要的情况下部分加载ListView中的内容,通过activity实现OnScrollListener这个接口我们可是在划屏到最底下的时候设置加载来实现动态的添加ListView中的数据。
很简单的例子,通过ListView显示出我们的android手机中都安装了哪些的应用,然后返回。通过浏览到最底部的时候触发OnScrollListener事件,我们就会把更多的应用添加到ListView中去。
直接看代码:
package com.jftt.listviewupdate; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.Toast; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView.OnItemClickListener; public class ListViewUpdate extends Activity implements OnScrollListener, OnItemClickListener { private List<ApplicationItemInfo> applicationItemInfoList; private List<ApplicationItemInfo> applicationItemInfoListTemp; private ApplicationItemAdapter applicationItemAdapter; private Handler handler; private ListView listView; private LinearLayout loading; private boolean refreshable; @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) { 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() { if (ListViewUpdate.this.applicationItemInfoList.size() < 80) { ListViewUpdate.this.applicationItemInfoListTemp = ListViewUpdate.this .getLocalApplicationInfo(); } else { ListViewUpdate.this.applicationItemInfoListTemp = null; } try { Thread.sleep(5000); } catch (InterruptedException e) { 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(); } }
package com.jftt.listviewupdate; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class ApplicationItemAdapter extends BaseAdapter { private LayoutInflater layoutInflater; private List<ApplicationItemInfo> applicationItemInfoList; public ApplicationItemAdapter(Context context, List<ApplicationItemInfo> applicationItemInfoList) { this.applicationItemInfoList = applicationItemInfoList; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return applicationItemInfoList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return applicationItemInfoList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View view, ViewGroup viewGroup) { ViewHolder viewHolder; // TODO Auto-generated method stub if (view == null) { view = layoutInflater.inflate(R.layout.application_item, null); viewHolder = new ViewHolder(); viewHolder.icon = (ImageView) view.findViewById(R.id.icon); viewHolder.title = (TextView) view.findViewById(R.id.title); viewHolder.packageName = (TextView) view .findViewById(R.id.packagename); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } viewHolder.icon.setImageDrawable(applicationItemInfoList.get(position) .getIcon()); viewHolder.title.setText(applicationItemInfoList.get(position) .getName()); viewHolder.packageName.setText(applicationItemInfoList.get(position) .getPackageName()); return view; } private class ViewHolder { ImageView icon; TextView title; TextView packageName; } }
package com.jftt.listviewupdate; import java.io.Serializable; import android.graphics.drawable.Drawable; public class ApplicationItemInfo implements Serializable { private static final long serialVersionUID = -738265888959292655L; private Drawable icon; private String packageName; private String name; private String[] permissions; public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String[] getPermissions() { return permissions; } public void setPermissions(String[] permissions) { this.permissions = permissions; } }
评论
6 楼
flyingyong
2013-08-06
怎么不能下载呢?
5 楼
ljh_tnt
2012-09-22
学习学习先
4 楼
lyb2518
2012-07-04
感谢楼主的分享。真诚地说声谢谢!
3 楼
xianjoong
2012-04-23
感谢楼主的分享!
2 楼
wenjiefeng
2012-01-14
感谢楼主的src,学习了
1 楼
viva-浅唱
2011-12-01
感谢楼主的src,让我解决的问题~~~~~
发表评论
-
安卓自动编译工具Gradle
2015-09-02 15:15 1103https://developer.android.com ... -
图片的水平平铺效果
2014-03-10 15:45 2411Android要实现图片的水平平铺效果: 很简单也很强大, ... -
LinearLayout中的属性baselineAligned的使用
2013-10-19 18:54 34385Android线性布局中的属性主要的就是控制浮动方向的or ... -
Activity伪造Dialog的时候不能全屏显示
2013-05-31 08:42 14205使用Activity伪造Dialog的时候出现不能全屏的问 ... -
修改局部源码烧录手顺
2012-08-16 09:23 20981. 添加命令到PATH路径下,方便全局使用: andro ... -
备份我的源码烧录的sh文件
2012-07-16 10:39 1339烧录编译的img文件: 01.tofastboot.sh ... -
备份我的源码编译的sh文件
2012-07-16 10:34 1554编译命令写一次就可以了。以后直接使用。 01-extra_s ... -
ADT20安装报错
2012-06-29 23:44 9161Cannot complete the install bec ... -
ubuntu12.04(VirtualBox) 64-bit build android source
2012-05-20 17:33 29891.download VirtalBox(Virtual ... -
搭建android源码编译开发服务器
2012-05-20 17:32 73001.android服务器,其实也就是台式机器的增强版本。基本上 ... -
ADT离线安装报错
2012-04-23 09:37 3350最近使用ADT的离线zip包安装ADT总是报错。说是 Can ... -
Android源码编译中的Makefile文件
2012-04-18 09:09 24661.和大多shell文件一样,makefile中的#表示注释, ... -
遍历android根目录的简单资源查看器
2012-04-16 17:02 3705效果如图: package com.txl.sua; ... -
Nexus s与android4.0
2011-12-14 13:15 13891.内核源码链接 http://android.git.ke ... -
Android编译生成系统-译文
2011-12-08 11:21 3461生成 4.0.1 系统 下边 ... -
Android中设置TextView的颜色setTextColor
2011-11-10 11:34 182288android中设置TextView的颜色有方法setTex ... -
Android中设置activity的background为Wallpaper
2011-08-15 08:34 3863<activity android:name=&q ... -
android程序中怎么实现平铺效果
2011-08-10 17:06 4897很简单,就像window桌面图片一样,如果图片小的话就会平铺。 ... -
一个android应用向Home screen添加多个Widget
2011-08-09 15:12 5137如Twitter客户端或者HTC的日历应用,可以添加大小不 ... -
怎么实现Widget中的动画效果,如渐入等
2011-08-09 11:22 3040怎么在Widget中添加animation,如渐入渐出,淡入淡 ...
相关推荐
Android 自定义ListView实现底部分页刷新与顶部下拉刷新 一.ListView 底部分页加载 整个底部分页加载,主要分一下几步: 1.加载底部自定义View; 2.响应OnScrollListener监听事件,onScroll方法记录最后可见的View ...
android 里listView 拖动子item 删除该项
今天实现listview的下拉刷新和上拉加载的时候,遇到了一个问题,*就是说需要根据listview中滑动的位置来进行下拉刷新和上拉加载。* 具体点,只有当我的listview滑动到最顶部的时候,这时候下拉才执行刷新操作;只有...
ListView底部item飞入动画效果,详情见博客:http://blog.csdn.net/qibin0506/article/details/48434823
本demo使用ListView展示子项Item,子项里面包含多个内容,默认只显示主要信息,其他部分隐藏,在点击后展开。对于顶部或底部显示不全的Item,进行自动滑动展示完全。并对于子项中是否有按钮的两种情况,都进行了实现...
主要介绍了Android item长按删除功能,在文章底部给大家介绍了android 长按删除listview的item的实例代码,需要的的朋友参考下
如何避开在ListView等AdapterView上动态添加删除项的陷阱,下面就为大家分享,具体内容如下 首先,定义如下array资源,作为列表的加载内容: <string name=app_name>MyListView <item>Java</item> <item>C</...
底部列表dialog,可以传入不同的bean类,只要添加注解即可识别不同的bean要展示的item,简单方便,可以避免因不同接口返回数据结构不同而单独处理数据问题。
底部选项卡 控件上的小红点 ListView item 未读消息数目等
包括Android布局,弹窗,配色,单击事件,UI,精美炫酷的activity切换动画和空间动画,是新手必备的源码,内含相关的Dome 25件。 - - 文件夹 PATH 列表 卷序列号为 4E8D-6931 C:. │ .txt │ Android-UI-新手必备...
里面有几个功能,1.跳转到通讯录,2.圆形渐变色,3.转盘,4.dialog样式,5.流式标签,6.底部导航栏,7.可移动item的listview,8.朋友圈图片样式。自己总结综合的,万一以后用的到呢,就都分类保存了。
但是ListView的一些常用功能却没有提供,比如我们平时会经常用到的addHeaderView,addFooterView,既然RecyclerView没有提供这个方法,我们应该如何为列表添加头部和底部呢?通过看ListView的源码可以知道Li