Android之ListView

合集下载

Android基础篇之在ListView中显示网络图片

Android基础篇之在ListView中显示网络图片

Android基础篇之在ListView中显示网络图片大家知道ImageView 类虽然有一个setImageUri 方法,但不能直接接受一个由网络地址生成的uri 作为参数从而显示图片,我们只好使用其 setImageBitmap 方法,如view plaincopy to clipboardprint?1.BitmapmBitmap=null;2.3.URLurl=new URL(imageUrl);4.5.HttpURLConnectionconn=(HttpURLConnection)url.openConnection();6.7.InputStream is=conn.getInputStream();8.9.mBitmap=BitmapFactory.decodeStream(is);在SimpleAdapter中需要一个数据源,用来存储数据的,在显示图片时我们要用HashMap<>存储一个Bitmap;但仅存取了Bitmap时在ListView中是无法显示图片的,我们需要对SimpleAdapter进行处理 。

如下是对SimpleAdaptr处理的主要代码:view plaincopy to clipboardprint?1.adapter.setViewBinder(new ViewBinder(){2.3.publicboolean setViewValue(Viewview,Objectdata,4.StringtextRepresentation){5.//判断是否为我们要处理的对象6.if(view instanceof ImageView&&data instanceof Bitmap){7.ImageViewiv=(ImageView)view;8.9.iv.setImageBitmap((Bitmap)data);10.returntrue;11.}else12.returnfalse;13.}14.});看API对Android.widget.SimpleAdapter.ViewBinder的解释:This class can be used by external clients of SimpleAdapter to bind values to views. You should use this class to bind values to views that are not directly supported by SimpleAdapter or to change the way binding occurs for views supported by SimpleAdapter.你可以使用该类来处理SimpleAdapter不直接支持的数据;下面来看看完整的代码:main.xml 中就是一个ListView , list_item.xml 是为ListView中控件提供布局 ,就是一个ImageView。

Android ListView优化实践

Android ListView优化实践

Android ListView优化实践在看了一些vogella的文章之后,发现关于android listview性能优化这一段很有意思,于是实践了一下,经过优化,性能确实提升不少!先看看优化前和优化后的比较:优化前的log截图:优化后的log截图:并且,在不停滚动ListView的过程中,优化之前会出现ANR现象,在A VD上特别容易复现:然后,优化后显得很流畅,附上对于的log截图:下面附上相关代码分析:ListView中的每一个Item由一个ImageView 和一个TextView组成Layout:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&lt;LinearLayout xmlns:android=&quot;/apk/res/android&quot;android:layout_width=&quot;fill_parent&quot;android:layout_height=&quot;fill_parent&quot;android:orientation=&quot;horizontal&quot; &gt;&lt;ImageView android:id=&quot;@+id/imageView&quot;android:layout_width=&quot;wrap_content&quot;android:layout_height=&quot;fill_parent&quot; /&gt;&quot;&lt;TextView android:id=&quot;@+id/textView&quot;android:layout_width=&quot;wrap_content&quot;android:layout_height=&quot;fill_parent&quot;android:layout_marginLeft=&quot;15dp&quot;android:gravity=&quot;center_vertical&quot; /&gt;&lt;/LinearLayout&gt;Activity继承自ListActivity,我故意增加了Item,方便测试,效果更明显:public class ListViewDemo extends ListActivity{private final String[] mItems = new String[] { &quot;Android&quot;, &quot;iPhone&quot;, &quot;WindowsMobile&quot;, &quot;Blackberry&quot;, &quot;WebOS&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;,&quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;,&quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;,&quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;,&quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;,&quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;,&quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;,&quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;,&quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;,&quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;,&quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;,&quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;,&quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;,&quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;,&quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;,&quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;,&quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;,&quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;,&quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;,&quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;,&quot;Linux&quot;, &quot;OS/2&quot;, &quot;Ubuntu&quot;, &quot;Windows7&quot;, &quot;Max OS X&quot;, &quot;Linux&quot;, &quot;OS/2&quot; };@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ListViewArrayAdapter adapter = new ListViewArrayAdapter(this, mItems);getListView().setAdapter(adapter);}}然后custom Adapter,优化之前的adapter:@Overridepublic View getView(int position, View convertView, ViewGroup parent) {long start = System.currentTimeMillis();LayoutInflater inflater = (LayoutInflater) mContext.getLayoutInflater();View rowView = inflater.inflate(mViewResourceId, parent, false);TextView textView = (TextView) rowView.findViewById(mTextViewResourceId);ImageView imageView = (ImageView) rowView.findViewById(mImageViewResourceId);textView.setText(mNames[position]);String s = mNames[position];if (s.startsWith(&quot;Windows7&quot;) || s.startsWith(&quot;iPhone&quot;)) { imageView.setImageResource(R.drawable.no);} else {imageView.setImageResource(R.drawable.yes);}Log.v(&quot;jerikc&quot;,&quot;cost time = &quot; + (System.currentTimeMillis() - start));return rowView;}优化之后的Adapter:public class ListViewArrayAdapter extends ArrayAdapter&lt;String&gt;{private final Activity mContext;private final String[] mNames;private final static int mViewResourceId = yout.text_image_row_layout;private final static int mTextViewResourceId = R.id.textView;private final static int mImageViewResourceId = R.id.imageView;static class ViewHolder {public TextView text;public ImageView image;}public ListViewArrayAdapter(Activity context, String[] names) {super(context, mViewResourceId, names);this.mContext = context;this.mNames = names;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {long start = System.currentTimeMillis();View rowView = convertView;if (rowView == null) {LayoutInflater inflater = mContext.getLayoutInflater();rowView = inflater.inflate(mViewResourceId, null);ViewHolder viewHolder = new ViewHolder();viewHolder.text = (TextView) rowView.findViewById(mTextViewResourceId);viewHolder.image = (ImageView) rowView.findViewById(mImageViewResourceId);rowView.setTag(viewHolder);}ViewHolder holder = (ViewHolder) rowView.getTag();String s = mNames[position];holder.text.setText(s);if (s.startsWith(&quot;Windows7&quot;) || s.startsWith(&quot;iPhone&quot;)) { holder.image.setImageResource(R.drawable.no);} else {holder.image.setImageResource(R.drawable.yes);}Log.v(&quot;jerikc&quot;,&quot;cost time = &quot; + (System.currentTimeMillis() - start));return rowView;}}优化的大致思想就是:优化之前,每次加载item的时候,都要加载一下布局文件,然后生成一个新的row View对象,然后通过View找到对应的ImageView和TextView,正如我们所知道的那样,加载布局文件时很耗时的,特别是在操作比较频繁情况下,这是不可忍受的,所以会导致ANR现象。

Android中的ListView控件的优化方法

Android中的ListView控件的优化方法
程序设计 ・ P r o g r a m D e s i g n
A n d r o i d中的 L i s t V i e w控件 的优化方法
文/ 孔 令宏
通过 这种优 化方 式,我 们不用 再每 次都 创建新 的c o n v e r t V i e w,而 是 采 取 每 次 判 断 c o n v e r t Vi e w 是否为 空 ,若 为空 ,则创建 布局 对象 。若不为空,说明当前屏幕 能够 同时显示
图书数量
( 3 )重写 g e t l t e m( i n t p o s i t i o n ) 方 法 , 返
与当前的 c o n v e r t V i e w相关联的对 象;
回当前位置 的图书信息 , 代码参考如下:
r e t u r n b o o k s . g e t ( p o s i t i o n ) ;
而它本 身只负责布局
D , 代码参考如下: 下面 以一 个显示 图书 目录 程序为 例,说 返 回当前位置图书的 l r e t u r n b o o k s . g e t p ( o s i t i o n ) . g e t l d 0 ; 明如何对 L i s t V i e w控件进行优化使用 。 C . 定义好适配器类后,在 Ma i n Ac t i v i y 中 t 步骤 1 . 在 a c t i v i t y ma i nx . ml 布局文件 中
需要每 次通 过 c o n v e r t V i e w. i f n d Vi e wl d 0方法来
获取 c o n v e r t V i e w 中使用 的各个 控件 ,由于 每 界面上的控件 。 然后 ,在 g e t V i e w方 法 中,加 载 每 一 个 次 都需要遍历对应 的 XML文件 ,降低程序 运 L i s t Vi e w是 An d r o i d应用程序开发 中最 常 行效率 . t e m 界面。 我们 也可 以将每 个 c o n v e r t Vi e w 中使 i 用 的控件之一 ,该控件使用垂直列表 的方式 显 用 的各个控件也保存成一个对象 ,进行复用, 通 过 以上 步 骤,我 们 就 实现 了 L i s t V i e w 示多个选项 ,特别适用于像手机这种 长方形屏 以优 化程序 。然后 ,我们可 以通过 以下两个方 视 图 的 优 化 ,达 到 了 i t e m 界 面 复 用 ,和 将 幕 ,且屏幕相对较小的设备。我们在手机上常 法将保存好 的对 象和 当前的 c t e m 界面上的所 有控件 保存在 一个对象 中的目 o n v e r t V i e w对 象 i 用 的通 讯录、微博、Q Q聊 天和淘宝宝 贝的浏

android listview的用法

android listview的用法

android listview的用法
Android中的ListView是一种可以显示垂直列表的滚动控件。

它为用户提供了一种可以浏览许多项目,而无需滚动屏幕的便捷方式。

ListView通常用来显示一组有序的数据,这些数据可以是文本,图像,或者其他任意形式的内容。

ListView可以包含任意数量的项目,而不会对屏幕上的性能造成影响。

使用ListView时,必须将它与ArrayAdapter(或其他类型的适配器)结合起来,这样ListView才能正确地显示数据。

ArrayAdapter可以将数据转换为ListView可以显示的格式。

要实现ListView,首先要在布局文件中定义ListView,然后在Activity中初始化ListView,并将ArrayAdapter与ListView绑定。

最后,可以为ListView 注册一个OnItemClickListener监听器,用于处理项目被单击时发生的事件。

Android 中的ListView选中项的背景颜色怎么设置

Android 中的ListView选中项的背景颜色怎么设置

Android 中的ListView选中项的背景颜色怎么设置?android中ListView获得焦点的项默认是黄色的(模拟器上)现在因为需求想要自己定义被选中项的背景能实现吗?最佳答案完全可以实现,这用到了Android的Selector(根据组件的状态显示该状态对应的图片,并以此图片作为背景显示)。

把下面的XML文件保存成你自己命名的.xml文件(比如list_bg.xml),注意,这个文件相当于一个背景图片选择器,在系统使用时根据 ListView中的列表项的状态来使用相应的背景图片,什么情况使用什么图片我在下面都进行了说明。

还有,你可以把它看成是一个图片来使用,放于 drawable目录下,配置背景属性android:background="@drawable/list_bg"就能达到你需要的目的了。

<?xml version="1.0" encoding="utf-8" ?><selector xmlns:android="/apk/res/android"> <item android:state_window_focused="false"android:drawable="@drawable/没有焦点时图片背景" /><item android:state_focused="true"android:state_pressed="true" <!--双条件-->android:drawable="@drawable/非触摸模式下获得焦点并单击时的背景图片" /><item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/触摸模式下单击时的背景图片" /><item android:state_selected="true" android:drawable="@drawable/选中时的图片背景" /><item android:state_focused="true" android:drawable="@drawable/获得焦点时的图片背景" /><item android:drawable="@drawable/silver" /> <!--default color --> </selector>---------------------------------------------------------------------------------------------------------------在values下新建一个color.xml<?xml version="1.0" encoding="utf-8"?><resources><drawable name="darkgray">#808080FF</drawable><drawable name="white">#FFFFFFFF</drawable><drawable name="silver">#00ffffff</drawable> <!-- 透明色 --></resources>-------------------------------------------------------------------------------------------------------------------------------------------------main布局文件中的系统 ListView 控件,注意这不是 ListViewItem 控件。

listview使用方法

listview使用方法

listview使用方法listview是android开发中最常用的控件之一,它可以以列表形式展示数据,并且可以支持用户的滑动和点击操作。

在本篇文章中,我们将介绍listview的使用方法以及常用属性和方法。

1. 布局文件中添加listview在布局文件中添加以下代码,即可创建一个简单的listview。

```<ListViewandroid:id='@+id/list_view'android:layout_width='match_parent'android:layout_height='match_parent' />```2. 创建适配器适配器是listview展示数据的关键。

我们需要创建一个适配器,并在适配器中实现数据的绑定和显示。

```public class MyAdapter extends BaseAdapter {private List<String> mData;public MyAdapter(List<String> data) {mData = data;}@Overridepublic int getCount() {return mData.size();}@Overridepublic Object getItem(int position) {return mData.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (convertView == null) {convertView =LayoutInflater.from(parent.getContext()).inflate(yout.i tem_layout, parent, false);viewHolder = new ViewHolder();viewHolder.mTextView =convertView.findViewById(R.id.text_view);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}viewHolder.mTextView.setText(mData.get(position));return convertView;}private static class ViewHolder {private TextView mTextView;}}```在适配器中,我们通过实现BaseAdapter类的方法来为listview 绑定数据。

listview控件的滚动用法

listview控件的滚动用法

listview控件的滚动用法
Listview控件是Android开发中非常常见的一种控件,它可以
将一组数据在界面上以列表的形式展现出来。

在使用Listview控件时,我们经常会遇到需要滚动列表的情况,这时候我们可以利用Listview提供的一些方法来完成滚动操作。

1. scrollTo()方法
scrollTo()方法可以将列表滚动到指定的位置。

它接受两个参数,第一个参数为x轴方向的偏移量,第二个参数为y轴方向的偏移量。

例如,我们可以使用以下代码将列表滚动到第5个item的位置:
listView.scrollTo(0, 5 * itemViewHeight);
2. smoothScrollToPosition()方法
smoothScrollToPosition()方法可以将列表平滑滚动到指定位置。

它接受一个参数,即要滚动到的item的位置。

例如,我们可以
使用以下代码将列表平滑滚动到第5个item的位置:
listView.smoothScrollToPosition(5);
3. setSelection()方法
setSelection()方法可以将指定位置的item滚动到列表的可见
区域内。

它接受一个参数,即要滚动到的item的位置。

例如,我们
可以使用以下代码将第5个item滚动到列表的可见区域内:
listView.setSelection(5);
总之,Listview控件的滚动用法非常简单,只需要调用相应的
方法即可。

在实际开发中,我们可以根据具体的业务需求来选择合适
的滚动方法。

Android listview与adapter用法

Android listview与adapter用法

Android listview与adapter用法listview与adapter用法博客分类:android一个ListView通常有两个职责。

(1)将数据填充到布局。

(2)处理用户的选择点击等操作。

第一点很好理解,ListView就是实现这个功能的。

第二点也不难做到,在后面的学习中读者会发现,这非常简单。

一个ListView的创建需要3个元素。

(1)ListView中的每一列的View。

(2)填入View的数据或者图片等。

(3)连接数据与ListView的适配器。

也就是说,要使用ListView,首先要了解什么是适配器。

适配器是一个连接数据和AdapterView (ListView就是一个典型的AdapterView,后面还会学习其他的)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便Android中提供了很多的Adapter,表4-5列出了常用的几个。

其实适配器还有很多,要注意的是,各种Adapter只不过是转换的方式和能力不一样而已。

下面就通过使用不同的Adapter来为ListView绑定数据(SimpleCursorAdapter暂且不讲,后面讲SQLite 时会介绍)。

4.12.1 ListView使用ArrayAdapter用ArrayAdapter可以实现简单的ListView的数据绑定。

默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。

ArrayAdapter的使用非常简单。

实例:工程目录:EX_04_12在布局文件中加入一个ListView控件。

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><!-- 添加一个ListView控件--><ListViewandroid:id="@+id/lv"android:layout_width="fill_parent"android:layout_height="fill_parent"/></LinearLayout>然后在Activity中初始化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

海文国际
Android之ListView
一、列表(ListView)
在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。

二、列表(ListView)的显示需要三个元素
1.ListView 用来展示列表的View。

2.适配器用来把数据映射到ListView上的中介。

3.数据具体的将被映射的字符串,图片,或者基本组件。

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。

SimpleAdapter有最好的扩充性,可以自定义出各种效果。

SimpleCursorAdapter可以认为是SimpleAdapter 对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

ListView lstView;
三、ListView事件
setOnItemClickListener(点击触摸屏有效)当项被点击后触发
setOnItemSelectListener(点击手机键盘有效,4.*后点击也有效)
ListView lstCourse;
四、ListView提升效率
由于展示空间有限,即使有多个item,界面上只能展示有限的个数,这个时候只
海文国际 需要把有限个View展示在界面上就可以了.
最上方划出的View被接下来的进入界面的最下面的View重复利用的话,就可以大幅度的减少创建View的次数,这样效率得到了提升.
getView方法我们是实现者,android的ListView是调用者,ListView会为我们传入convertView的值.
当有可以重复利用的View时候,convertView为这个View的值,否则为null.
通过持有者模式优化布局,进行动态加载(使用到ConvertView)
在convertView中保存持有者对象,convertView.setTag(wrapper)
再从缓存中获取持有者对象wrapper = (ViewWrapper)convertView.getTag()
建立持有者类ViewWrapper(自定义,主要进行所有视图控件的存放),产生对象wrapper
海文国际
五、ListActivity
当Activity只涉及到一个列表,那么应该考虑将Activity创建成为ListActivity 的子类,而不是以Activity为基类.
当你想自定义布局时候,只需要把ListView标示为@android:id/list,ListActivity 就知道哪个部件是这个活动的主列表.
海文国际。

相关文档
最新文档