- 浏览: 682757 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (141)
- java (58)
- SQL (7)
- java开源 (2)
- javascript (3)
- struts2 (2)
- oracle (6)
- junit (1)
- js报表 (1)
- jQuery (5)
- 插件安装 (1)
- myeclipse (1)
- xfire (1)
- weblogic (1)
- hibernate (6)
- loading (1)
- jbpm (3)
- 物语 (0)
- android (14)
- spring (20)
- BigDecimal (1)
- view (1)
- 总结 (2)
- application (1)
- Netty (5)
- aop (1)
- redis (7)
- double (1)
- restful (1)
- cache (3)
- profile (1)
- redisTemplate (1)
- poi (3)
- excel导出 (1)
- mysql (7)
- group (4)
- replication (4)
- proxysql (1)
- windows (1)
- version (1)
- mongodb (2)
- RocketMQ (1)
- MQ (1)
- RSA (1)
- 日志 (2)
- ip (1)
- socket (1)
- hibernate-validator (1)
- delayQueue (1)
- spring-retry (1)
- rabbitmq (3)
- httpclient (1)
- tools (1)
- 增量发布 (1)
- web (3)
- spring-boot (5)
- druid (2)
- pageHelper (1)
- freemarker (1)
- RequestMapping (1)
- 性能优化 (2)
- springBoot (1)
- docker (2)
- 安全 (0)
- 国际化 (3)
- websocket (1)
- stomp (1)
- shiro (1)
- 网络安全 (2)
- 锁 (1)
- logback (1)
最新评论
-
changerzhuo_319:
谢谢大佬, 查了一天了没解决
Spring-boot构建多模块依赖工程时,maven打包异常:程序包xxx不存在 -
迪伦少校:
spring越来越优秀的同时,也越来越复杂
spring核心技术(1) -
hbxflihua:
ivi13 写道这种方式会有个问题,假如有个商户的交易量特别大 ...
使用spring-retry实现支付系统异步通知 -
ivi13:
这种方式会有个问题,假如有个商户的交易量特别大,通知全部失败, ...
使用spring-retry实现支付系统异步通知 -
ckxlnd:
挺好的 有借鉴意义
重写DispatcherServlet获取springmvc 所有RequestMapping的url
使用过ListView 的开发人员都知道,ListView 在一般情况下只能对每条记录设置一个监听事件。如果想在其中添加多个事件,就需要自定义Adapter 。
下面介绍一下如何自定义adapter 以及如何在一个Item 中绑定多个事件。
这里我们需要两个XML 文件、两个java 类。分别是存放ListView 的XML 、ListViewItem 的XML 、Activity 类和Adapter 类。
首先说说两个XML 文件。
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding= "10dip" android:orientation="vertical" > <ListView android:id="@id/android:list" android:layout_width = "fill_parent" android:layout_height = "fill_parent" /> </LinearLayout>
注意:这里的ListView 中id 使用了android 自定义的: @id/android:list
lvItem.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants" android:padding="5dip" > <ImageView android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dip" /> <ImageButton android:id="@+id/ItemCloseWin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/ItemWinName" android:layout_alignTop="@+id/ItemWinName" android:layout_alignParentRight="true" android:background="#e0000000" android:focusable="false" android:gravity="left|center_vertical" android:src="@android:drawable/ic_menu_close_clear_cancel" /> <ImageButton android:id="@+id/ItemEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/ItemWinName" android:layout_alignTop="@id/ItemWinName" android:layout_toLeftOf="@id/ItemCloseWin" android:background="#e0000000" android:focusable="false" android:gravity="left|center_vertical" android:src="@android:drawable/ic_dialog_email" /> <TextView android:id="@+id/ItemWinName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/ItemImage" android:layout_alignTop="@id/ItemImage" android:layout_toLeftOf="@id/ItemEmail" android:layout_toRightOf="@id/ItemImage" android:gravity="left|center_vertical" android:text="title" android:textSize="20dip" /> </RelativeLayout>
接下来看看Activity
package cn.mutil; import java.util.ArrayList; import java.util.HashMap; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; /** * ListView item 多事件Activity * @author lihua * */ public class LvWithButtonActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 关联Layout中的ListView ListView vncListView = (ListView) findViewById(android.R.id.list); // 生成动态数组,加入数据 ArrayList<HashMap<String, Object>> remoteWindowItem = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < 10; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.ic_launcher); // 图像资源的ID map.put("ItemWinName", "Window ID " + i); map.put("ItemEmail", android.R.drawable.ic_dialog_email); map.put("ItemCloseWin", android.R.drawable.ic_menu_close_clear_cancel); remoteWindowItem.add(map); } // 生成适配器的Item和动态数组对应的元素 LvButtonAdapter listItemAdapter = new LvButtonAdapter(this, remoteWindowItem, // 数据源 R.layout.lvitem, // ListItem对应的XML // 动态数组与ImageItem对应的子项 new String[] { "ItemImage", "ItemWinName","ItemEmail", "ItemCloseWin" }, // ImageItem的XML文件里面的一个ImageView,两个TextView ID new int[] { R.id.ItemImage, R.id.ItemWinName, R.id.ItemEmail, R.id.ItemCloseWin }); vncListView.setAdapter(listItemAdapter); /** * 设置整个Item被点击的事件 * 该事件在其他有事件的组件未被点击时触发 */ vncListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int position,long arg3) { TextView content = (TextView)view.findViewById(R.id.ItemWinName); Toast.makeText(LvWithButtonActivity.this, content.getText().toString() , Toast.LENGTH_SHORT).show(); } }); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); l.getItemAtPosition(position); } }
最后一个也是最重要的一个,自定义adapter
package cn.mutil; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class LvButtonAdapter extends BaseAdapter { private class ButtonViewHolder { ImageView appIcon; TextView appName; ImageButton buttonEmail; ImageButton buttonClose; } private ArrayList<HashMap<String, Object>> mAppList;//用于存放传递过来显示于ListView中的 数据 private LayoutInflater mInflater; private Context mContext; private String[] keyString; private int[] valueViewID; private ButtonViewHolder holder; public LvButtonAdapter(Context c,//上下文 ArrayList<HashMap<String, Object>> appList,//绑定数据 int resource00000,//ListView行记录layout String[] from, int[] to) { mAppList = appList; mContext = c; mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); keyString = new String[from.length]; valueViewID = new int[to.length]; System.arraycopy(from, 0, keyString, 0, from.length); System.arraycopy(to, 0, valueViewID, 0, to.length); } @Override public int getCount() { return mAppList.size(); } @Override public Object getItem(int position) { return mAppList.get(position); } @Override public long getItemId(int position) { return position; } /** * 删除数据集中的值 * @param position */ public void removeItem(int position) { mAppList.remove(position); this.notifyDataSetChanged(); } /** * 改变数据集中的值 * @param position * @param map */ public void changeItem(int position,HashMap<String, Object> map){ mAppList.remove(position); mAppList.add(position, map); this.notifyDataSetChanged(); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView != null) { holder = (ButtonViewHolder) convertView.getTag(); } else { convertView = mInflater.inflate(R.layout.lvitem, null); holder = new ButtonViewHolder(); holder.appIcon = (ImageView) convertView .findViewById(valueViewID[0]);//可以将valueViewID[0]替换成R.id.xxx holder.appName = (TextView) convertView .findViewById(valueViewID[1]); holder.buttonEmail = (ImageButton) convertView .findViewById(valueViewID[2]); holder.buttonClose = (ImageButton) convertView .findViewById(valueViewID[3]); convertView.setTag(holder); } HashMap<String, Object> appInfo = mAppList.get(position); if (appInfo != null) { String aname = (String) appInfo.get(keyString[1]); int mid = (Integer) appInfo.get(keyString[0]); int eid = (Integer) appInfo.get(keyString[2]); int bid = (Integer) appInfo.get(keyString[3]); holder.appName.setText(aname); holder.appName.setOnClickListener(new LvButtonListener(position)); holder.appIcon.setImageDrawable(holder.appIcon.getResources().getDrawable(mid)); holder.buttonEmail.setImageDrawable(holder.buttonEmail.getResources().getDrawable(eid)); holder.buttonEmail.setOnClickListener(new LvButtonListener(position)); holder.buttonClose.setImageDrawable(holder.buttonClose.getResources().getDrawable(bid)); holder.buttonClose.setOnClickListener(new LvButtonListener(position)); } return convertView; } /** * 按钮事件监听 * @author lihua * */ private class LvButtonListener implements View.OnClickListener { private int position; LvButtonListener(int pos) { position = pos; } @Override public void onClick(View v) { int vid = v.getId(); HashMap<String, Object> curMap = (HashMap<String, Object>)getItem(position); if (vid == holder.buttonClose.getId()){ //删除一行记录 Toast.makeText(mContext,"position:"+position+",data is being Deleted", Toast.LENGTH_LONG).show(); removeItem(position); //可以在这里操作数据库或更新服务端数据 }else if(vid == holder.buttonEmail.getId()){//发送邮件 Toast.makeText(mContext, "position:"+position+",sending email to xxx!", Toast.LENGTH_SHORT).show(); //可以在这里操作数据库或更新服务端数据 }else if(vid == holder.appName.getId()){//设置名称 Toast.makeText(mContext, "position is "+position+", appName:"+curMap.get("ItemWinName").toString(), Toast.LENGTH_SHORT).show(); curMap.put("ItemWinName", System.currentTimeMillis()+""); changeItem(position,curMap); //可以在这里操作数据库或更新服务端数据 } } } }
发表评论
-
Android 远程服务(remote service)
2012-05-29 18:08 9536Android 远程服务 Android远程服务(Remot ... -
百度地图 Android SDK 技术详解集锦
2012-05-21 15:46 2333【百度地图-android SDK】技术详解集锦 百 ... -
Android 避免重复提交
2012-05-11 13:19 7578不曾想,android系统也会有重复提交的问题。网上搜了下,基 ... -
Android 手写签名实例
2012-05-05 15:50 23536这篇文章本来想在一个月前就发布的,最近一直忙于国家电网手持 ... -
ScrollView 中嵌套ListView
2012-04-26 19:45 2049在ScrollView中嵌套使用ListView,Lis ... -
EditText 文本焦点事件
2012-04-19 12:12 9750焦点改变监听:setOnFocus ... -
自定义类继承ImageView 实现多点图片触碰的拖动和缩放
2012-04-13 10:37 15631最近的一个android 项目中,客户要求在查看拍照上传的图片 ... -
android 嵌入服务端页面二 之WebView与页面互调
2012-04-06 16:51 8987WebView引入页面及回调处理 <?xm ... -
android 嵌入服务端页面一 (抱歉,该篇无法用IE打开)
2012-04-05 23:59 2261<%@ page language="java ... -
android开发 ImageView显示文字
2012-03-25 15:35 20775我们将一张图片显示在屏幕上,首先要创建一个图片显示的对象Ima ... -
android开发 资料下载
2012-03-18 13:33 1774这里汇总了android的一些学习资料,有兴趣的可以下载看看。 ... -
Android开发 准备工作补充
2012-03-10 17:57 1309如果你用的IDE是myeclipse,直接通过插件 ... -
Android开发 准备工作
2012-03-10 17:39 1721Android 开发 前期准备: Eclipse3. ...
相关推荐
安卓listview自定义adapter包括demo和一些其他自定义绑定的代码
示例中的"adapter"文件可能包含了实现以上步骤的代码,包括自定义Adapter类、数据模型类以及展示数据的布局文件。在实际开发中,你可能还需要处理点击事件、优化视图复用等高级功能。 总之,自定义ListView的...
为了实现更加灵活和丰富的界面展示,我们通常需要对ListView进行自定义,这涉及到自定义Adapter的使用。自定义Adapter允许我们根据需求定制ListView的每一项视图,以适应不同的数据结构和界面设计。 首先,我们需要...
通过以上步骤,我们就可以实现ListView自定义Adapter的多视图Item功能。这不仅可以使列表更具多样性,还可以提升用户体验。在处理复杂数据展示时,这是非常实用的一种技术。在实际开发中,我们还可以进一步优化,...
本文将深入探讨如何使用自定义Adapter来创建一个功能丰富的Android ListView好友列表。 首先,我们需要理解ListView的工作原理。ListView依赖于Adapter来提供数据和视图之间的桥梁。Adapter是连接数据源(如...
在Android开发中,ListView是一个非常常用的控件,用于展示大量数据...但这个例子已经足够让你理解Adapter的工作原理和ListView的事件处理机制。通过实践和扩展,你可以更好地掌握这些知识,并应用于更复杂的项目中。
在Android开发中,ListView是一种常用的控件,用于展示大量数据列表。本项目旨在教你如何通过自定义Adapter来实现一个仿QQ...通过这个项目,你不仅能掌握自定义Adapter的基本用法,还能提升处理复杂界面设计的能力。
自定义Adapter是为了更灵活地控制ListView中的每个列表项的行为和外观。在自定义Adapter时,我们需要实现四个核心方法:`getCount()`、`getItem(int position)`、`getItemId(int position)`和`getView(int position,...
本篇将详细讲解如何在ListView中使用自定义Adapter来实现数据的及时更新。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来与数据源进行交互,Adapter是连接数据集和视图的桥梁。它负责从数据集中...
自定义Adapter可以让我们更自由地控制数据如何显示,以及实现特定的功能,如点击事件处理、动画效果等。 自定义Adapter的基本步骤如下: 1. 创建一个新的类,继承自BaseAdapter。BaseAdapter是Adapter的一个基础类...
Android ListView自定义Adapter实现仿QQ界面是一种常见的Android应用程序开发技术,通过自定义Adapter可以满足用户的个性化需求,提供更多的显示样式和交互方式。自定义Adapter的优点包括个性化需求、灵活性强和性能...
Flutter学习之旅(六)----ListView控件自定义Adapter以及带参数跳转,博客对应地址:http://blog.csdn.net/zhangxiangliang2/article/details/76383244
本项目聚焦于自定义Adapter的实现,特别是如何将其应用于ListView的数据显示。 首先,理解Adapter的基本原理是关键。Adapter是一个接口,它的主要职责是将数据模型转换为视图,以便在UI组件如ListView、GridView或...
这个过程涉及到Android的视图复用机制、数据绑定以及事件处理等多个核心知识点。 1. **Adapter原理**: Android的ListView工作基于Adapter模式,它作为数据源与ListView视图之间的桥梁。Adapter负责从数据源(如...
如果你需要自定义视图或者处理复杂数据模型,通常会继承BaseAdapter。你需要实现其中的几个关键方法,如`getCount()`(返回数据源大小),`getItem(int position)`(获取指定位置的项),`getView(int position, ...
10. **多类型列表项**: 如果ListView需要显示不同类型的列表项,自定义Adapter可以通过在`getViewTypeCount()`和`getItemViewType(int position)`方法中添加逻辑来处理。 综上所述,理解并熟练运用SimpleAdapter和...
如果需要对GridView的点击事件进行处理,可以在自定义Adapter的`getView()`方法中为每个View设置OnClickListener,或者在GridView本身设置OnItemClickListener。 通过以上步骤,我们就能创建一个能够满足特定需求...
为了使ListView显示的数据更加丰富多样,我们通常需要自定义适配器(Adapter)。本文将深入探讨如何创建和使用ListView的自定义适配器,以及它的工作原理。 首先,我们要理解适配器在ListView中的角色。适配器是...
为便于学习自定义的Adapter,本案例的界面未进行美化,功能已经实现,对于其中的getView(int position,View view ,ViewGroup vg)做了数据的填充操作。本案例功能及其简单,只涉及ListView中自定义适配器,没有对...
- 创建并实例化自定义的Adapter后,将其设置到ListView上,通过`listView.setAdapter(adapter)`来完成。 6. **监听器(Listeners)**: - 可能需要设置点击事件监听器,如`OnItemClickListener`,以便当用户点击...