- 浏览: 1099920 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
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 1129https://developer.android.com ... -
图片的水平平铺效果
2014-03-10 15:45 2444Android要实现图片的水平平铺效果: 很简单也很强大, ... -
LinearLayout中的属性baselineAligned的使用
2013-10-19 18:54 34415Android线性布局中的属性主要的就是控制浮动方向的or ... -
Activity伪造Dialog的时候不能全屏显示
2013-05-31 08:42 14266使用Activity伪造Dialog的时候出现不能全屏的问 ... -
修改局部源码烧录手顺
2012-08-16 09:23 21391. 添加命令到PATH路径下,方便全局使用: andro ... -
备份我的源码烧录的sh文件
2012-07-16 10:39 1380烧录编译的img文件: 01.tofastboot.sh ... -
备份我的源码编译的sh文件
2012-07-16 10:34 1603编译命令写一次就可以了。以后直接使用。 01-extra_s ... -
ADT20安装报错
2012-06-29 23:44 9232Cannot complete the install bec ... -
ubuntu12.04(VirtualBox) 64-bit build android source
2012-05-20 17:33 30431.download VirtalBox(Virtual ... -
搭建android源码编译开发服务器
2012-05-20 17:32 73511.android服务器,其实也就是台式机器的增强版本。基本上 ... -
ADT离线安装报错
2012-04-23 09:37 3398最近使用ADT的离线zip包安装ADT总是报错。说是 Can ... -
Android源码编译中的Makefile文件
2012-04-18 09:09 25571.和大多shell文件一样,makefile中的#表示注释, ... -
遍历android根目录的简单资源查看器
2012-04-16 17:02 3771效果如图: package com.txl.sua; ... -
Nexus s与android4.0
2011-12-14 13:15 14411.内核源码链接 http://android.git.ke ... -
Android编译生成系统-译文
2011-12-08 11:21 3536生成 4.0.1 系统 下边 ... -
Android中设置TextView的颜色setTextColor
2011-11-10 11:34 182369android中设置TextView的颜色有方法setTex ... -
Android中设置activity的background为Wallpaper
2011-08-15 08:34 3904<activity android:name=&q ... -
android程序中怎么实现平铺效果
2011-08-10 17:06 4932很简单,就像window桌面图片一样,如果图片小的话就会平铺。 ... -
一个android应用向Home screen添加多个Widget
2011-08-09 15:12 5137如Twitter客户端或者HTC的日历应用,可以添加大小不 ... -
怎么实现Widget中的动画效果,如渐入等
2011-08-09 11:22 3106怎么在Widget中添加animation,如渐入渐出,淡入淡 ...
相关推荐
本篇将详细介绍如何在Android中实现在ListView中拖动并删除Item。 首先,我们需要创建一个自定义的ListView,这个ListView需要能够识别用户的触摸事件,并处理拖动操作。在Android中,我们可以通过重写onTouchEvent...
本篇将深入讲解如何在Android中创建一个ListView,并实现它包含多个不同类型的Item。 1. **ListView基本结构** ListView由一系列的View(Item)组成,每个View代表数据集中的一个条目。这些Item通过Adapter进行...
Android 自定义ListView实现底部分页刷新与顶部下拉刷新 一.ListView 底部分页加载 整个底部分页加载,主要分一下几步: 1.加载底部自定义View; 2.响应OnScrollListener监听事件,onScroll方法记录最后可见的View ...
分页加载允许用户滚动到ListView底部时自动加载更多数据。实现这一功能可以使用EndlessScrolling监听器。首先,自定义一个继承自AbsListView的OnScrollListener: ```java private class EndlessScrollListener ...
在Android开发中,ListView是一种非常常见且重要的组件,它用于展示大量的数据列表,例如新闻、联系人、邮件等。在本教程中,我们将深入探讨如何利用ListView来浏览新闻。ListView的优势在于它可以动态加载数据,...
在这个"Android:ListView实现QQ列表"的实践中,我们将深入理解如何利用ListView和Adapter来创建一个类似于QQ消息列表的界面。 首先,我们来探讨ListView的基础。ListView是一个视图容器,可以展示多行数据,并且只...
本文将深入探讨如何在Android中实现ListView的边框圆角美化,以此来达到类似iPhone界面的视觉效果。 首先,我们需要理解ListView的基本结构。ListView是由多个View(通常是ListView项布局,即Item Layout)组成的,...
在Android应用开发中,ListView是展示大量数据列表的常用组件,尤其在实现分页加载和下拉刷新功能时,它的作用更加突出。本教程将详细讲解如何在Android中利用ListView实现下拉自动分页刷新的功能。 首先,我们需要...
5. 动态添加/移除View:在滚动到ListView底部时,动态地将底部View添加到父容器,当不再需要时再移除。这种方法灵活性较高,但需要精确控制View的添加和移除时机。 在实践中,可能需要结合多种方法,根据项目需求...
在这个场景中,我们将深入探讨如何在Android中实现ListView的item滑动删除效果,并解决常见的点击事件冲突问题。 首先,实现滑动删除效果,我们需要借助SwipeRefreshLayout和RecyclerView这两个组件。虽然原问题中...
在实现这些功能时,可能还会涉及到EditText的焦点管理,因为在一个ListView中,多个EditText可能会同时存在。为了避免焦点冲突,我们需要在适配器中处理焦点转移逻辑,确保每次只有一个EditText可以获取焦点。 此外...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。本资源"Android ListView实现各种版面设计功能 源码"聚焦于如何利用ListView实现多样化的版面设计,提升用户界面的视觉效果和交互体验。核心...
在实现上拉加载时,我们需要监听ListView的滚动事件。通过设置OnScrollListener,当ListView的lastVisibleItem等于totalItemCount时,表示用户已经滚动到了列表的最底部。这时,我们可以允许用户触发上拉加载操作。...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。动态查询和更新ListView是提高用户体验的关键技术,尤其是在处理大量数据流或者实时更新信息时。本文将深入探讨如何实现Android ListView的...
在ListView底部添加一个“添加”按钮,点击后,向数据源中添加新的条目,然后调用`notifyDataSetChanged()`。同样,添加新item时也可以加入动画,如淡入效果,提升用户体验。 6. DragListView库: 提到的...
在Android开发中,ListView是展示大量数据列表的常用组件,尤其适用于实现长列表的滚动查看。本案例将详细讲解如何在Android应用中采用ListView来显示数据列表,包括基本的使用方法、自定义适配器以及优化性能的策略...
本文将详细讲解如何在Android应用中实现自定义的ListView与Gallery组合,以及这两个组件的核心特性和使用技巧。 首先,ListView是Android中用于显示长列表的视图,它可以动态加载数据,避免一次性加载大量内容导致...
本教程通过一个名为"ListApp"的示例项目,详细介绍了如何在Android中使用ListView来构建用户界面并实现基本的功能。 一、ListView基础 ListView是Android SDK中的一种视图容器,用于显示一系列可滚动的行项。它可以...
在Android开发中,ListView是一种常用的控件,用于展示大量数据列表。然而,标准的ListView仅提供了简单的滚动功能,用户无法直接进行拖放操作。要实现ListView中的item随意拖动,我们需要借助于第三方库或者自定义...
当需要在ListView底部添加新数据时,可以先调用`notifyDataSetChanged()`通知Adapter数据已改变,然后在数据加载完成后,再向Adapter的列表中添加新的item。这样,ListView会自动调用`getView()`方法,为新item应用...