- 浏览: 138766 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (137)
- java (138)
- c# winform (笨方法)根据不同的样式配置 设置窗体相关控件的背景 以改变窗体风格 (1)
- Android平台下实现一个进程管理器 (1)
- 装饰模式 (1)
- 【转】介绍线性代数 (1)
- fqueue初步分析 (1)
- 千万级sql优化 (1)
- 开源项目 (1)
- js弹出遮罩层【并弹出提示信息】 (1)
- 代码高亮、源码格式、iteye代码格式的种种方法 (1)
- Drupal学习笔记(四)warning: array_key_exists(): The first argument should be either a string or an integer (1)
- 2011年Java EE生产力报告 (1)
- java(j2se)学习笔记----类注释文档编写方法? (1)
- ubuntu 添加应用程序 到快速启动 (1)
- JPA注解配置实例 (1)
- C++著名内裤 (1)
- Android笔试或者面试的几个题目 (1)
- Ajax&&GWT (1)
- IHS静默安装(转) (1)
- WIN98下运行DOTNET程序的一些问题 (1)
- 开启新的项目——基于电子邮件的知识管理系统 (1)
- 这里的BLOG服务器也太不稳定了 (1)
- MapXtreme2004代码 读取TAB表中的元素 (1)
- 终于把我的大部分BLOG复制到这里来了 (1)
- 2011NOKIA笔试题目 (1)
- Ajax实现省市二级联动(源代码) (1)
- mxgraph之保存图片 (1)
- sso单点登录 (1)
- Android开发之SurfaceView (1)
- Android开发之ListView (1)
- SQL SERVER 2008 中分页方法集锦 (1)
- 2011-12-2 (1)
- 分页组件 (1)
- Myeclipse自动加入struts 2 Core Libraries导致antlr错误 (1)
- jbpm4在tomcat6中EL错误 (1)
- c++中有关数组和指针的若干问题 (1)
- rails 上传文件和删除文件 (1)
最新评论
-
mazongfei:
就是有点乱,不过还是不错的
sso单点登录 -
xiaokang1582830:
写得这么乱,地球人是无法看得懂的...
sso单点登录 -
shenyu:
大侠,下回分解在哪里啊?
mxgraph之保存图片 -
GZQ0821:
为啥不编译后贴出来呢!
SQL SERVER 2008 中分页方法集锦 -
evil9999:
http://belives2012.blog.163.com ...
千万级sql优化
<p><br></p>
<h1>Android开发之ListView</h1>
<p>/*</p>
<p>* Android开发之ListView</p>
<p>*</p>
<p>* Created on: 2011-8-7</p>
<p>* Author: blueeagle</p>
<p>* Email: liujiaxiang@gmail.com</p>
<p>*/</p>
<p></p>
<p> 最近在学习android开发过程中,发现有关ListView这个类的问题和处理方式的问题比较多。需要总结学习一下。</p>
<div>
<p> 要学习ListView,不得不学习Adapter。在学习之前,先考察类的继承关系:</p>
<p>ListView:</p>
<p align="left">java.lang.Object</p>
<p align="left"> android.view.View</p>
<p align="left"> android.view.ViewGroup</p>
<p align="left"> android.widget.AdapterView<T extends android.widget.Adapter></p>
<p align="left"> android.widget.AbsListView</p>
<div>
<p align="left"> android.widget.ListView</p>
<p>Adapter:</p>
<p>已知间接继承的子类</p>
<p><a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/ArrayAdapter.html">ArrayAdapter</a><T>,<a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/BaseAdapter.html">BaseAdapter</a>,<a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/CursorAdapter.html">CursorAdapter</a>,<a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/HeaderViewListAdapter.html">HeaderViewListAdapter</a>,</p>
<p><a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/ListAdapter.html">ListAdapter</a>,<a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/ResourceCursorAdapter.html">ResourceCursorAdapter</a>,<a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/SimpleAdapter.html">SimpleAdapter</a>,<a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/SimpleCursorAdapter.html">SimpleCursorAdapter</a>,</p>
<div>
<p><a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/SpinnerAdapter.html">SpinnerAdapter</a>,<a href="http://write.blog.csdn.net/android/android-sdk_r06-windows/android-sdk-windows/docs/reference/android/widget/WrapperListAdapter.html">WrapperListAdapter</a></p>
<p>这里我也先不说我们在开发中经常会使用到什么类型的Adapter。先给几个应用程序截图来说明已经存在的ListView的应用,并对这些已经存在的ListView做实现DEMO。</p>
<h2>单一的ListView</h2>
<p><img alt="" src="http://hi.csdn.net/attachment/201108/6/0_13126561184D9y.gif"></p>
<p>如图所示,这种ListView不存在任何复杂的内容,每行只显示一些文字。如果没有特殊要求的话,这是最简单最实用的一种ListView。</p>
<p>实现这种ListView有两种方式:</p>
<p><strong>第一种是:不借助XML文件来直接实现:</strong></p>
<p>源码如下:</p>
<textarea readonly name="code" class="java">/*
* Android开发之ListView
* ListViewExActivity.java
* Created on: 2011-8-7
* Author: blueeagle
* Email: liujiaxiang@gmail.com
*/
package com.blueeagle;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ListViewExActivity extends Activity {
private ListView listView;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
listView = new ListView(this);
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));
setContentView(listView);
}
private ArrayList<String> getData(){
ArrayList<String> myData = new ArrayList<String>();
myData.add("思想决定行为 ");
myData.add("行为形成习惯");
myData.add("习惯决定性格");
myData.add("性格决定命运");
return myData;
}
}
</textarea><p><br></p>
<p><strong>第二种方法是借助XML文件:</strong></p>
<p>源码如下:</p>
<strong><em></em></strong><textarea readonly name="code" class="java">/*
* Android开发之ListView
* ListViewExActivity.java
* Created on: 2011-8-7
* Author: blueeagle
* Email: liujiaxiang@gmail.com
*/
package com.blueeagle;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ListViewExActivity extends Activity {
private ListView listView;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.myListView);
listView = (ListView)findViewById(R.id.myListView);
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));
}
private ArrayList<String> getData(){
ArrayList<String> myData = new ArrayList<String>();
myData.add("思想决定行为 ");
myData.add("行为形成习惯");
myData.add("习惯决定性格");
myData.add("性格决定命运");
return myData;
}
}
</textarea><p><br></p>
<p><strong><em>myListView.xml</em></strong></p>
<strong></strong><textarea readonly name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/myListView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
</textarea><p><br></p>
<p><strong>说明:有时候我们在开发过程中,需要在一个没有xml的View中添加一个ListView控件,有时候我们可能需要在有xml文件描述的时候添加一个ListView控件。需要注意的是:</strong>setContentView()<strong>这个函数的先后顺序要写清楚。</strong></p>
<p><strong>在这种方法中我们使用了ArrayAdapter。</strong></p>
<h2>稍复杂点的ListView——添加了标题(描述)元素</h2>
<p><img alt="" src="http://hi.csdn.net/attachment/201108/6/0_1312656094qt11.gif"></p>
<p>如图所示,这种ListView只是比单一的ListView多了一个标题,或者说是描述的ListView,这种ListView应该是我们在实际开发中用的最多的一种ListView了。</p>
<p align="left">同样的,实现这种ListView有两种方式。理论跟上面的一样,现在就举一种例子。</p>
<p>源码如下:</p>
<p></p>
<textarea readonly name="code" class="java">/*
* Android开发之ListView
* ListViewExTitleActivity.java
* Created on: 2011-8-7
* Author: blueeagle
* Email: liujiaxiang@gmail.com
*/
package com.blueeagle;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class ListViewExTitleActivity extends Activity {
private String[] myTitle = { "思想决定行为", "行为形成习惯", "习惯决定性格", "性格决定命运","狂热的Android开发者"};
private String[] myDescript = { "说话办事儿,首先要有一个好的思想,有了好思想,才能体现在行动上", "能够坚持的行动将成为习惯", "对事对人的习惯性行为表现为人的性格", "往往成就大事的人,都有着很好的性格",
"狂热的Android程序员需要有一个好性格" };
private String[] myNote = { "备注1", "备注2", "备注3", "备注4","备注5" };
private ListView myListView;
ArrayList<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int lengh = myTitle.length;
for(int i =0; i < lengh; i++) {
Map<String,Object> item = new HashMap<String,Object>();
item.put("title", myTitle[i]);
item.put("Descript", myDescript[i]);
item.put("note", myNote[i]);
mData.add(item);
}
myListView = new ListView(this);
SimpleAdapter adapter = new SimpleAdapter(this,mData,R.layout.layout_item_1,
new String[]{"title","Descript","note"},new int[]{R.id.title,R.id.descript,R.id.note});
myListView.setAdapter(adapter);
setContentView(myListView);
}
}
</textarea><p></p>
<p><strong><em>layout_item_1.xml</em></strong></p>
<strong></strong><textarea readonly name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ffff"
android:textSize="22px" />
<TextView
android:id="@+id/descript"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:textSize="13px" />
<TextView
android:id="@+id/note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF0000"
android:textSize="13px"
android:layout_gravity="right"
/>
</LinearLayout>
</textarea><p></p>
<p><strong></strong></p>
<p><strong>说明:在这个例子里面我们使用到了SimpleAdapter。看这个名字,简单的Adapter,其实不是那么简单。查看手册,可以知道其构造函数以及意义:</strong></p>
<p><strong>public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)</strong></p>
<p><strong>第一个context :SimpleAdapter所要运行关联到的视图。一般而言,就是这个SimpleAdapter所在的Activity,所以这个参数一般是this。</strong></p>
<p><strong>第二个是一个泛型只要是一个List就行,这一般会想到是ArrayList,而他内部存储的则是Map或者继承自Map的对象,比如HashMap。每一个ArrayList中的一行就代表着呈现出来的一行,Map的键就是这一行的列名,值也是有列名的。</strong></p>
<p><strong>第三个资源文件,就是说要加载这个两列所需要的视图资源文件,也就是布局文件,可以定义成.xml的文件。</strong></p>
<p><strong>第四个参数是一个数组,主要是将Map对象中的名称映射到列名,一一对应</strong></p>
<p><strong>第五个是将第四个参数的值一一对象的显示(一一对应)在接下来的int形的id数组中,这个id数组就是LayOut的xml文件中命名id形成的唯一的int型标识符</strong></p>
<p align="left"><strong>在程序中:</strong> </p>
<strong></strong><textarea readonly name="code" class="java">Map<String,Object> item = new HashMap<String,Object>();
item.put("title", myTitle[i]);
item.put("Descript", myDescript[i]);
item.put("note", myNote[i]);
mData.add(item);
</textarea><p><br></p>
<p><strong>这段代码里,一个item设置了三个值,也可以设置更少或者是更多的值。如果设置了更少或者更多的值,相应的需要在.xml文件里修改布局,同时修改程序里SimpleAdapter的第四个和第五个参数。即修改程序中:</strong></p>
<strong></strong><textarea readonly name="code" class="java">SimpleAdapter(this,mData,R.layout.layout_item_1,
new String[]{"title","Descript","note"},new int[]{R.id.title,R.id.descript,R.id.note});
</textarea><p align="left"><br></p>
<p align="left"><strong>这段代码的参数,可以增加也可以减少。</strong></p>
<p align="left"><strong> 特别要注意的是,在item里设置的值,还可以是图形或者是别的视图类型,如下实例。</strong></p>
<h2>ListView——添加了标题(描述)元素以及图片元素</h2>
<p><img src="http://hi.csdn.net/attachment/201108/6/0_1312656286B668.gif" alt=""></p>
<p>如图所示,这种ListView只是比前面的ListView多了一个图标。这正是在上一个例子后面所说明的一样。只是添加了几行源码,如下:</p>
<p align="left"><strong><em>ListViewExTitleActivity.java</em></strong> </p>
<p align="left">添加了:</p>
<strong><em></em></strong><textarea readonly name="code" class="java">item.put("image", R.drawable.icon);
SimpleAdapter adapter = new SimpleAdapter(this,mData,R.layout.layout_item_1,
new String[]{"image","title","Descript","note"},new int[]{R.id.imageicon,R.id.title,R.id.descript,R.id.note});
</textarea><p align="left"><br></p>
<p align="left"><strong><em>layout_item_1.xml</em></strong></p>
<p align="left">添加了:</p>
<strong></strong><textarea readonly name="code" class="html"><ImageView
android:id="@+id/imageicon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</textarea><p></p>
<p><strong>这里需要注意的是:如果不喜欢每一个item的布局,可以修改xml布局文件里的结构,调整图片位置,字体位置等。</strong></p>
<p><strong></strong></p>
<h2>ListView——自定义特别的ListView</h2>
<p><img src="http://hi.csdn.net/attachment/201108/6/0_1312656301kZ7x.gif" alt=""></p>
<p>如图所示,我们在程序开发过程中,经常会遇见各种特定样式,类型等等的需求,在图中这种情况下,上述几种例子都不能很好的解决,这个时候就要自己定义了。自定义ListView是一个很有意思的过程。</p>
<p>ListView在绘制前会调用getCount()方法得到绘制次数,这个次数,实际上就是ListView的Item项数 ,然后实例化自己定义的一个Adapter,一般常用的有两种Adapter,一种是BaseAdapter,适合较少的List Item;另一种是BaseAdapter的子类:ArrayAdapter,适合较多,较复杂的List Item。这些Adapter都通过getView()方法一项一项的绘制ListView,所以我们可以在这里面根据position(当前绘制的ID)来任意的修改绘制的内容。</p>
<p>在举例之前,不得不说一下这个特别重要的函数getView():</p>
<p>查看手册可以得到getView的解释:</p>
<p>public abstract <a href="http://android.toolib.net/reference/android/view/View.html">
View</a> getView (int position, <a href="http://android.toolib.net/reference/android/view/View.html">
View</a> convertView, <a href="http://android.toolib.net/reference/android/view/ViewGroup.html">
ViewGroup</a> parent) </p>
<p>获取用于显示数据集中指定位置上的数据的视图。你可以手工创建一个视图, 也可以从 XML 布局文件中展开视图。展开视图时,父视图(GridView、ListView 等) 将应用默认的布局参数,除非你使用<a href="http://android.toolib.net/reference/android/view/LayoutInflater.html#inflate(int,%20android.view.ViewGroup,%20boolean)">inflate(int, android.view.ViewGroup,
boolean)</a> inflate(int, android.view.ViewGroup, boolean)指定根视图,并指定附加到根元素。</p>
<p>参数</p>
<table cellpadding="0" border="0"><tbody>
<tr>
<td>
<p>position</p>
</td>
<td>
<p>要从适配器中取得的视图的位置.</p>
</td>
</tr>
<tr>
<td>
<p>convertView</p>
</td>
<td>
<p>要重用的旧视图,如果可能。注意,在使用之前你应该检查该视图是否非空, 并且是适当的类型。如果不能转化该视图来正确显示数据,该方法将创建新视图。</p>
</td>
</tr>
<tr>
<td>
<p>parent</p>
</td>
<td>
<p>该视图最终关联到的父视图。</p>
</td>
</tr>
</tbody></table>
<p>返回值</p>
<p>指定位置的数据对应的视图。 </p>
<p></p>
<p>看的晕,不要紧,从例子入手:</p>
<p>首先我们来写java文件。我们写一个自己的adapter继承于BaseAdapter</p>
<p align="left"><strong><em></em></strong></p>
<strong><em></em></strong><textarea readonly name="code" class="java">/*
* Android开发之ListView
* ListViewExTitleActivity.java
* Created on: 2011-8-7
* Author: blueeagle
* Email: liujiaxiang@gmail.com
*/
package com.blueeagle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ListViewExTitleActivity extends Activity {
private String[] myTitle = { "思想决定行为", "行为形成习惯", "习惯决定性格", "性格决定命运","狂热的Android开发者","狂热的Android开发者"};
private String[] myDescript = { "说话办事儿,首先要有一个好的思想,有了好思想,才能体现在行动上", "能够坚持的行动将成为习惯", "对事对人的习惯性行为表现为人的性格", "往往成就大事的人,都有着很好的性格",
"狂热的Android程序员需要有一个好性格" ,"狂热的Android开发者"};
private String[] myNote = { "备注1", "备注2", "备注3", "备注4","备注5" ,"狂热的Android开发者"};
ListView myListView = null;
NewTypeAdapter myAdapter = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myListView = new ListView(this);
myAdapter = new NewTypeAdapter(this);
myListView.setAdapter(myAdapter);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3){
arg1.setBackgroundColor(Color.BLACK);
System.out.println(arg2);
Toast.makeText(ListViewExTitleActivity.this,"您选择了" + myTitle[arg2], Toast.LENGTH_LONG).show();
}
});
setContentView(myListView);
}
class NewTypeAdapter extends BaseAdapter {
private Context mContext;
private int[] colors = new int[]{Color.RED,Color.BLUE,Color.GREEN,Color.WHITE};
public NewTypeAdapter(Context context) {
mContext = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return myTitle.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
System.out.println(position);
ImageView myIamge = null;
TextView myTextTitle = null;
TextView myTextDescript = null;
TextView myTextNote = null;
//if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.layout_item_1, null);
myIamge = (ImageView) convertView.findViewById(R.id.imageicon);
myTextTitle =(TextView) convertView.findViewById(R.id.title);
myTextDescript= (TextView) convertView.findViewById(R.id.descript);
myTextNote= (TextView) convertView.findViewById(R.id.note);
// }
// else
try{
int j = position%colors.length;
convertView.setBackgroundColor(colors[j]);
myTextTitle.setText(myTitle[position]);
myTextDescript.setText(myDescript[position]);
myTextNote.setText(myNote[position]);
myIamge.setImageResource(R.drawable.icon);
}
catch(Exception e){
e.printStackTrace();
}
return convertView;
}
}
}
</textarea><p align="left"><br></p>
<p align="left"><strong><em>layout_item_1.xml:</em></strong></p>
<textarea readonly name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/imageicon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ffff"
android:textSize="22px" />
<TextView
android:id="@+id/descript"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:textSize="13px" />
<TextView
android:id="@+id/note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF0000"
android:textSize="13px"
/>
</LinearLayout>
</textarea><p align="left"><br></p>
<p><strong>说明:首先说明的是,这个例子自定义了类:NewTpyeAdapter,继承BaseAdapter,当然要实现BaseAdapter的各个成员方法。程序OnCreate方法中主要有四个内容:实例化NewTypeAdapter,实例化ListView,然后利用</strong>myListView.setAdapter(myAdapter);<strong>将ListView和NewTypeAdapter绑定。</strong></p>
<p><strong>这里需要特别注意的是:如果ListViewExTitleActivity继承的是Activity,则必须要加上setContentView(myListView)这句,如果继承的是ListActivity,则不用加啦,因为其本身就是一个List了。</strong></p>
<p><strong>接下来就是我们的最重要的方法,getView()方法。</strong></p>
<p><strong>在说getView方法之前说几个可能出现的问题:</strong></p>
<p><strong>1. getView()方法不会被调用;</strong></p>
<p><strong>2. 当ListView在一个屏幕内显示不全的时候,拖动后的数据会重复。</strong></p>
<p><strong>3. 如果在ListView中的某个Item中加入一个按钮的话,这个Item的点击事件将消失。</strong></p>
<p><strong>下面来解答这些问题:getView()这个方法的调用是有条件的。我在开始试验的时候,getView()方法一直不会被调用,后来才发现,如果getCount ()的返回值为0的话,则不会被调用。因此需要把BaseAdapter的成员方法都写全。</strong></p>
<p><strong>对于重复问题:如上面源码,如果加入了if(convertView ==null)则表示其一屏幕显示了从数据空间读取的内容,滚动后则不会再从数据空间读取,而是从现有空间读取。手册中说使用的时候先判断是否为空,但是我这里去掉了这个if语句,则能够实现效果,但是可能带来效率问题,这样的话每次回滚,则每次会重绘。</strong></p>
<p><strong>对于加入按钮点击事件消失的问题,是因为按钮的焦点抢夺了listview项的焦点。因此listview的项就点击不到了。</strong></p>
<p><strong></strong></p>
<h2>总结:</h2>
<p> 以上说了四种ListView的实现方式。当然第四种还可以引申开去。比如我们可以继承ArrayAdapter;也可以在每个ListItem中加入一个按钮,加入按钮只需要添加该按钮的消息响应函数就可以了。</p>
<p> 相信经过上面的学习,对ListView这个类应该有一定的掌握了,一些大大小小的问题应该都能够解决了。</p>
<p></p>
发表评论
-
rails 上传文件和删除文件
2012-02-07 14:33 1126文件上传,页面代码: <%form_tag '/ ... -
c++中有关数组和指针的若干问题
2012-02-07 14:13 827<pre class="reply-t ... -
jbpm4在tomcat6中EL错误
2012-02-04 14:03 1095? jbpm4 在tomcat6 下面ssh2 这个错 ... -
Myeclipse自动加入struts 2 Core Libraries导致antlr错误
2012-02-04 13:29 998解决方法: 选择windows---preferenc ... -
分页组件
2012-02-03 12:23 942撒地方阿斯顿的撒啊受到爱上 ... -
2011-12-2
2012-02-02 15:34 758ubuntu系统root默认密码,每次开机会随机产生默 ... -
SQL SERVER 2008 中分页方法集锦
2012-02-01 09:34 1417<span style="font-s ... -
Android开发之SurfaceView
2012-01-11 15:34 1264<h1>Android开发 ... -
sso单点登录
2012-01-11 12:44 3978SSO单点登录 目 ... -
mxgraph之保存图片
2011-12-28 18:38 24671、写在前端:任何情况下,保存图片不可能只通过前台代码 ... -
Ajax实现省市二级联动(源代码)
2011-12-28 16:23 5029<span style="font-f ... -
2011NOKIA笔试题目
2011-12-21 09:29 1085今天去NOKIA机试,纯粹打酱油,没什么准备,题目貌似 ... -
终于把我的大部分BLOG复制到这里来了
2011-12-16 16:22 1046本来我的BLOG都在博客中国的<img src= ... -
MapXtreme2004代码 读取TAB表中的元素
2011-12-15 12:14 961<?xml:namespace prefix = ... -
这里的BLOG服务器也太不稳定了
2011-12-14 20:53 703<p class="MsoPlainT ... -
开启新的项目——基于电子邮件的知识管理系统
2011-12-14 19:59 948</span></font>& ... -
WIN98下运行DOTNET程序的一些问题
2011-12-14 17:24 822</span></font>& ... -
IHS静默安装(转)
2011-12-13 11:59 1341<span style="col ... -
Ajax&&GWT
2011-12-13 10:14 685工作的久了,一直忙于公司相关的技术和业务上,对于如今流 ... -
Android笔试或者面试的几个题目
2011-12-12 09:59 890最近一直在帮项目组招聘Android开发人员。面试的过 ...
相关推荐
本资料主要围绕`android开发之listView`这一主题,深入探讨ListView的基本使用、自定义适配器、优化策略以及常见问题。 一、ListView基本使用 ListView的基本使用通常包括以下几个步骤: 1. 在布局文件中声明...
在Android应用开发中,ListView是常用的组件之一,用于展示大量数据列表。然而,当ListView与EditText结合使用时,经常会遇到焦点问题,这是由于ListView的滚动机制与EditText的输入焦点冲突导致的。本教程将深入...
在Android开发中,ListView是广泛使用的组件,用于展示大量数据列表。然而,它在处理大量图片时容易引发性能问题,如内存溢出(OOM)、图片闪烁等。本篇将深入探讨如何对ListView进行优化,以及如何实现图片的异步...
Android开发之ListView的简单用法及定制ListView界面操作示例 标题:Android开发之ListView的简单用法及定制ListView界面操作示例 描述:本文主要介绍了Android开发之ListView的简单用法及定制ListView界面操作,...
在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。当需求涉及列表中的每个条目本身也需要展示一个子列表时,我们就会遇到ListView的嵌套问题。本教程将详细讲解如何在Android Studio环境下...
在Android应用开发中,ListView是显示大量数据列表的常用组件,它允许用户滚动查看条目,具有很高的可定制性。本篇文章将深入解析ListView的源码,帮助...通过不断实践和学习,开发者能逐步成为Android开发的高手。
在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。然而,有时我们可能需要在一个ListView的项中再嵌套另一个ListView,这被称为ListView的嵌套。这样的设计可以用于展示复杂的数据结构,比如...
本文实例讲述了Android开发之ListView列表刷新和加载更多实现方法。分享给大家供大家参考。具体如下: 上下拉实现刷新和加载更多的ListView,如下: package com.sin.android.ui; import android.content.Context; ...
在Android开发中,ListView是一个非常常用的组件,用于展示大量数据列表。然而,为了提供更好的用户体验,许多应用都引入了下拉刷新的功能,使得用户在顶部拉动列表时可以更新数据。本教程将指导你在Android Studio...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据的列表形式。它具有高度可定制性,能够实现各种自定义布局和交互效果。本教程将深入讲解如何实现一个基本的ListView,并在用户点击列表项时跳转到...
在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。它的高效性和可定制性使得开发者能够灵活地创建各种列表视图。本篇文章将深入解析ListView组件的使用方法,包括`android:...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。ListView下拉刷新功能是现代移动应用中的一个常见特性,允许用户通过下拉列表来获取最新的数据,如社交媒体的新消息或天气更新。这个"Android...
在Android开发中,有时我们需要创建一个对话框(Dialog)来展示一些信息或者提供用户交互,例如选择、设置等。在这种情况下,如果对话框中的内容需要包含列表数据,我们就会使用到`Dialog`嵌套`ListView`的技术。这...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。为了提升用户体验和界面设计的美观性,我们常常需要对ListView进行定制化,包括设置边框和实现圆角效果。本文将深入探讨如何在Android中实现...
实现这个效果的方法有多种,一种是使用布局嵌套,将吸顶视图放在ListView之上,通过监听ListView的滚动事件来改变吸顶视图的可见性;另一种方法是结合使用`CoordinatorLayout`和`AppBarLayout`,这两种组件是Android...
在Android应用开发中,ListView是一种常用的控件,用于展示大量数据列表。它的可滚动特性使得它在各种场景下都非常实用,比如展示联系人、菜单项等。然而,仅仅使用ListView来展示列表数据并不足够,很多时候我们...
本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能。分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在一个界面显示了listview,但显示的内容分为...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。在本文中,我们将深入探讨如何在Android Studio中实现ListView的动态增加以及左滑删除功能,这将帮助你构建更加用户友好的应用程序。 首先...
在Android开发中,ListView是一种非常常见且重要的组件,它用于展示大量的数据列表,例如新闻、联系人、邮件等。在本教程中,我们将深入探讨如何利用ListView来浏览新闻。ListView的优势在于它可以动态加载数据,...