- 浏览: 3024448 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (893)
- android (110)
- iphone (198)
- java (79)
- JavaScript手册-目录 (9)
- JavaScript手册-Array (19)
- JavaScript手册-Boolean (5)
- JavaScript手册-Date (50)
- JavaScript手册-Math (30)
- JavaScript手册-Number (14)
- JavaScript手册-RegExp (7)
- JavaScript手册-String (38)
- JavaScript手册-全局函数 (8)
- JavaScript实用脚本 (7)
- Others (21)
- java-jpcap (7)
- java-thread (1)
- ibm文章 (3)
- classloader (2)
- java-filter (2)
- 运行环境 (33)
- java-正则 (2)
- oracle (1)
- linux-shell (26)
- wap (1)
- sqlite (3)
- wow (1)
- jvm (1)
- git (5)
- unity3d (29)
- iap (2)
- mysql (23)
- nginx (14)
- tomcat (9)
- apache (2)
- php (1)
- ubuntu (40)
- rsa (1)
- golang (21)
- appstore (5)
- sftp (2)
- log4j (2)
- netty (18)
- 测试工具 (6)
- memcache (5)
- 设计模式 (1)
- centos (8)
- google_iab (5)
- iOS专题 (4)
- mac (10)
- 安装配置帮助手册 (2)
- im4java_graphicsmagick (5)
- inotify-tools (1)
- erlang (6)
- 微信支付 (1)
- redis (8)
- RabbitMQ (5)
最新评论
-
heng123:
Netty视频教程https://www.douban.com ...
netty4.0.23 初学的demo -
maotou1988:
使用Netty进行Android与Server端通信实现文字发 ...
netty4.0.23 初学的demo -
码革裹尸:
非常感谢,正好用上
android 呼入电话的监听(来电监听) -
rigou:
提示的/222.177.4.242 无法链接到ip地址,是什 ...
通过 itms:services://? 在线安装ipa ,跨过app-store -
duwanbo:
GridView与数据绑定
使用自定义的BaseAdapter实现LIstView的展示
实现以下功能点:
1.通过自定义的BaseAdapter展示ListView;
2.动态修改、刷新ListView内容;
3.在自定义的BaseAdapter中实现ListView内容的点击和长按点击事件;
4.在BaseAdapter的getView方法中动态增加新组件;
效果图如下:
xml配置文件1(list_view01.xml)
<?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" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/editText01Edit" android:layout_width="110sp" android:layout_height="wrap_content" android:text="" /> <Button android:id="@+id/button01Edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="动态修改第1行第2列数据" android:onClick="editPersonAndRefreshListView01" /> </LinearLayout> <ListView android:id="@+id/listView01" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
xml配置文件2(list_view01_item.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/listView01Item01" android:layout_width="50sp" android:layout_height="wrap_content" /> <TextView android:id="@+id/listView01Item02" android:layout_width="90sp" android:layout_height="wrap_content" /> <TextView android:id="@+id/listView01Item03" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
Activity类代码:
package com.zhouzijing.android; import java.util.ArrayList; import java.util.List; import com.zhouzijing.android.util.MenuEntity; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuItem; import android.view.View; import android.view.View.OnCreateContextMenuListener; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.Toast; public class ListViewDemo extends Activity { //定义Person List<Person> persons ; ListAdapter adapter = null; ListView listView01 = null; EditText editTextPersonName = null; //定义上下文菜单 final private static int CONTEXT_MENU_EDIT = 0;//菜单[编辑]的编号 final private static int CONTEXT_MENU_SHARE = 1;//菜单[分享]的编号 final private static int CONTEXT_MENU_DELETE = 2;//菜单[删除]的编号 final private static int CONTEXT_MENU_CANCEL = 3;//菜单[取消]的编号 private MenuEntity[] contextMenus = { new MenuEntity(0, CONTEXT_MENU_EDIT, 0, "编辑"), new MenuEntity(0, CONTEXT_MENU_SHARE, 1, "分享"), new MenuEntity(0, CONTEXT_MENU_DELETE, 2, "删除"), new MenuEntity(0, CONTEXT_MENU_CANCEL, 3, "取消"), }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_view01); //获取组件 listView01 = (ListView)findViewById(R.id.listView01); editTextPersonName = (EditText)findViewById(R.id.editText01Edit); //显示ListView initListAllPersons(); showByMyBaseAdapter(); //初始化ListView的事件 //initListView01Event(); } public void initListAllPersons(){ persons = new ArrayList<Person>(); persons.add(new Person(100,"李小龙","香港",android.R.drawable.ic_delete)); persons.add(new Person(101,"施瓦辛格","美国",android.R.drawable.ic_dialog_alert)); persons.add(new Person(102,"戴安娜王妃","英国",android.R.drawable.ic_dialog_dialer)); persons.add(new Person(103,"成龙","香港",android.R.drawable.ic_dialog_map)); persons.add(new Person(104,"史泰龙","美国",android.R.drawable.ic_lock_idle_alarm)); persons.add(new Person(105,"圣女贞德","法国",android.R.drawable.ic_media_next)); persons.add(new Person(106,"列宁","苏联",android.R.drawable.ic_media_play)); persons.add(new Person(107,"爱迪生","美国",android.R.drawable.ic_menu_add)); persons.add(new Person(108,"孔子","中国",android.R.drawable.ic_media_rew)); persons.add(new Person(109,"杨七郎","宋朝",android.R.drawable.ic_menu_zoom)); persons.add(new Person(110,"秦始皇","秦国",android.R.drawable.ic_menu_agenda)); persons.add(new Person(111,"岳飞","宋朝",android.R.drawable.ic_lock_lock)); } public void showByMyBaseAdapter(){ adapter = new MyBaseAdapter(this, persons); listView01.setAdapter(adapter); } /** * 按钮button01Edit的onClick事件. * @param view */ public void editPersonAndRefreshListView01(View view){ //获取TextEdit数据 String value = editTextPersonName.getText().toString(); //更新ListView的内容,并且动态刷新. persons.get(0).name=value; ((BaseAdapter) adapter).notifyDataSetChanged(); } /** * 初始化listView01的事件. */ public void initListView01Event(){ //ListView的item点击事件 listView01.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "[OnItemClickListener]点击了:"+persons.get(position).name, Toast.LENGTH_SHORT).show(); } }); //ListView的item长按点击事件 listView01.setOnItemLongClickListener(new OnItemLongClickListener(){ @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "[OnItemLongClickListener]点击了:"+persons.get(position).name, Toast.LENGTH_SHORT).show(); return false; } }); //ListView的键盘选中事件(直接触摸屏幕选中不会激发) listView01.setOnItemSelectedListener(new OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "[OnItemSelectedListener:onItemSelected]点击了:" +persons.get(position).name, Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { Toast.makeText(getApplicationContext(), "[OnItemSelectedListener:onNothingSelected]点击了", Toast.LENGTH_SHORT).show(); } }); //ListView组件:创建上下文菜单 listView01.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { //获取上下文菜单点击的ListView的位置(position)属性 AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; int position = info.position; //设置上下文菜单标题 menu.setHeaderTitle(persons.get(position).name); //设置上下文菜单栏目 MenuEntity menuEntity = null; for(int i=0;i<contextMenus.length;i++){ menuEntity = contextMenus[i]; menu.add(menuEntity.getGroupId(),menuEntity.getItemId() ,menuEntity.getOrder(),menuEntity.getTitle()); } } }); } //监听选择上下文菜单的选择事件 @Override public boolean onContextItemSelected(MenuItem item) { //选中的上下文菜单的itemId int itemId = item.getItemId(); //获取上下文菜单点击的ListView的位置(position)属性 AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); int position = info.position; //Toast Toast.makeText(getApplicationContext(), "[onContextItemSelected]点击了"+persons.get(position).name+"" + ",菜单="+contextMenus[itemId].getTitle(), Toast.LENGTH_SHORT).show(); return true; } }
Person类代码
package com.zhouzijing.android; public class Person { public int id; public String name; public String address; public int photo; public Person(int id, String name, String address,int photo) { super(); this.id = id; this.name = name; this.address = address; this.photo = photo; } }
自定义的BaseAdapter类代码
package com.zhouzijing.android; import java.util.List; import android.content.Context; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class MyBaseAdapter extends BaseAdapter { private List<Person> persons; Context context; public MyBaseAdapter(Context context,List<Person> persons){ this.persons = persons; this.context = context; } @Override public int getCount() { return (persons==null)?0:persons.size(); } @Override public Object getItem(int position) { return persons.get(position); } @Override public long getItemId(int position) { return position; } public class ViewHolder{ TextView textViewItem01; TextView textViewItem02; TextView textViewItem03; ImageView imageView; } @Override public View getView(int position, View convertView, ViewGroup parent) { final Person person = (Person)getItem(position); ViewHolder viewHolder = null; if(convertView==null){ Log.d("MyBaseAdapter", "新建convertView,position="+position); convertView = LayoutInflater.from(context).inflate( R.layout.list_view01_item, null); viewHolder = new ViewHolder(); viewHolder.textViewItem01 = (TextView)convertView.findViewById( R.id.listView01Item01); viewHolder.textViewItem02 = (TextView)convertView.findViewById( R.id.listView01Item02); viewHolder.textViewItem03 = (TextView)convertView.findViewById( R.id.listView01Item03); //动态增加1个ImageView viewHolder.imageView = new ImageView(context); LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); mParams.gravity = Gravity.CENTER; mParams.width=50; viewHolder.imageView.setLayoutParams(mParams); //这个ImageView放到ListView的第2列之后 ((LinearLayout)convertView).addView(viewHolder.imageView,2); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder)convertView.getTag(); Log.d("MyBaseAdapter", "旧的convertView,position="+position); } viewHolder.textViewItem01.setText(String.valueOf(person.id)); viewHolder.textViewItem02.setText(person.name); viewHolder.textViewItem03.setText(person.address); viewHolder.imageView.setImageResource(person.photo); //对ListView中第1个TextView配置OnClick事件 viewHolder.textViewItem01.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(context, "[textViewItem01.setOnClickListener]点击了"+person.name, Toast.LENGTH_SHORT).show(); } }); //对ListView中的每一行信息配置OnClick事件 convertView.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(context, "[convertView.setOnClickListener]点击了"+person.name, Toast.LENGTH_SHORT).show(); } }); //对ListView中的每一行信息配置OnLongClick事件 convertView.setOnLongClickListener(new OnLongClickListener(){ @Override public boolean onLongClick(View v) { Toast.makeText(context, "[convertView.setOnLongClickListener]点击了"+person.name, Toast.LENGTH_SHORT).show(); return true; } }); return convertView; } }
MenuEntity类代码:
package com.zhouzijing.android.util; /** * 定义菜单实体结构. * @author stephen * */ public class MenuEntity{ /** * 生成菜单. * @param groupId * @param itemId * @param order * @param title */ public MenuEntity(int groupId, int itemId, int order, CharSequence title) { super(); this.groupId = groupId; this.itemId = itemId; this.order = order; this.title = title; } /** * 组. */ private int groupId; /** * 菜单编号. */ private int itemId; /** * 显示顺序号. */ private int order; /** * 菜单显示名称. */ private CharSequence title; /** * @return the groupId */ public int getGroupId() { return groupId; } /** * @param groupId the groupId to set */ public void setGroupId(int groupId) { this.groupId = groupId; } /** * @return the itemId */ public int getItemId() { return itemId; } /** * @param itemId the itemId to set */ public void setItemId(int itemId) { this.itemId = itemId; } /** * @return the order */ public int getOrder() { return order; } /** * @param order the order to set */ public void setOrder(int order) { this.order = order; } /** * @return the title */ public CharSequence getTitle() { return title; } /** * @param title the title to set */ public void setTitle(CharSequence title) { this.title = title; } }
发表评论
-
Android Fragment 真正的完全解析(下)
2015-03-25 14:30 1140Android Fragment 真正� ... -
Android Fragment 真正的完全解析(上)
2015-03-25 10:14 935Android Fragment 真正的 ... -
Activity的生命周期方法
2015-03-25 09:54 605一:Activity的生命周期方法 Android ... -
Android在layout xml中使用include
2015-03-25 07:28 1021在Android的layout样式定义中,可以使 ... -
一个支持圆角的快速ImageView:RoundedImageView
2015-03-07 09:50 11120一个支持圆角的快速ImageView:Rounded ... -
ImageView图片设置
2015-03-05 23:08 984显示任意图像,例如图标。ImageView类可以加载 ... -
ListActivity的onListItemClick不响应的解决办法
2015-03-04 17:57 1131ListActivity的onListItemClic ... -
ListView中有控件隐藏或显示造成的显示错误问题
2015-03-03 23:03 1877ListView中有控件隐藏或显示造成的显示错误问题 ... -
Android中Application类用法
2015-03-03 09:12 1023Android中Application类用法 ... -
Android使用Application总结
2015-03-03 09:11 1215Android使用Application� ... -
在android中运行java main方法
2015-02-27 10:38 1027在android中运行java main方法 ... -
android BitmapFactory.Options
2015-02-19 21:01 1056public Bitmap inBi ... -
android 基础demo例子
2015-02-16 21:06 857demoDatas.add(new DemoBe ... -
Android大图片裁剪终极解决方案
2015-02-15 17:08 2191Android大图片裁剪终 ... -
Android_照相机Camera_调用系统照相机返回data为空
2015-02-15 14:17 1311Android_照相机Camera_调用系统照相机返回 ... -
Android: 打印Bundle内容
2015-02-15 14:11 3022Android: 打印Bundle内容 有的时 ... -
android线程、UI、AsyncTask
2015-02-13 18:06 1303本文是转摘的,看过了觉得很好!所以转了过来!如果你想要 ... -
Fragment中ListView的使用
2015-02-06 23:01 2150Fragment中ListView的使用 直接 ... -
在安卓开发时用酷派手机无法打印出应用内的日志的解决方法
2014-12-11 20:39 1223在安卓开发时用酷派手机无法打印出应用内的日志的解决方法 ... -
查看安卓APK文件证书的方法
2014-12-04 10:05 1051************************** ...
相关推荐
至此,我们已经掌握了在Android Studio中使用ListView和自定义BaseAdapter的基本步骤。通过这种方式,你可以灵活地展示各种类型的数据,并且可以通过扩展Adapter来实现更复杂的功能,如点击事件、长按事件等。在实际...
总结来说,"用BaseAdapter实现的ListView"意味着开发者通过自定义适配器的方式,将数据源与ListView进行了绑定,实现了数据的动态加载和视图的个性化呈现。BaseAdapter的灵活性使得开发者能够完全控制ListView的显示...
自定义BaseAdapter操作步骤实现Listview的界面显示,操作简易
本示例"BaseAdapter_listview"正是通过自定义BaseAdapter来实现ListView的展示。 首先,我们要理解`Adapter`的概念。Adapter是数据源和UI控件之间的桥梁,它将数据转换成可以被View显示的格式。在ListView中,每个...
3. 创建自定义BaseAdapter,将Java对象列表作为数据源。 4. 设置ListView的Adapter为自定义的BaseAdapter。 5. ListView会自动调用Adapter的getView()方法,根据数据生成并显示列表项。 总结,JSON的解析和显示是...
- 视图复用:为了提高性能,ListView使用了convertView机制。在getView()中,如果convertView不为空,那么我们可以复用这个已经创建过的View,避免频繁地创建新View。 - 数据绑定:使用findViewById()获取View,...
通过自定义BaseAdapter,我们可以控制ListView中的每一项如何显示,包括添加图片。 1. **创建布局文件**: 首先,我们需要为ListView的每个Item创建一个布局文件。这个布局通常会包含一个ImageView和一个TextView,...
它与BaseAdapter结合使用,可以实现数据的动态加载和界面的复用。在这个场景中,我们要讨论的重点是如何在ListView中的每个Item(即列表项)上添加Button,并处理这些Button的点击事件,以便根据点击的Button获取...
可能是展示自定义BaseAdapter在实际应用中的截图,显示了适配器如何将数据呈现到屏幕上的视图组件中,比如ListView的各个条目。 通过以上所述,我们可以理解自定义BaseAdapter在Android开发中的重要性和实现方式,...
在提供的"ListViewTeacheing"文件中,可能包含了一个示例项目的源代码,包括一个自定义的BaseAdapter实现以及如何在Activity中使用这个Adapter与ListView进行交互。通过学习这个例子,你可以更好地理解上述步骤,并...
- 为了高效地加载大量数据,ListView使用了视图复用机制(View Recycling),只有当前可见的Item会被渲染,其他Item会复用已存在的View,从而节省内存和提高性能。 2. **自定义Adapter** - 在ListView中,数据...
要实现一个自定义Dialog嵌套ListView,我们首先需要创建一个包含ListView的XML布局文件。这个布局通常会包含一个ListView以及其他可能的组件,如标题、按钮等。例如: ```xml android:id="@+id/dialog_title" ...
本文将深入探讨如何实现一个自定义Dialog来展示ListView,并且允许用户通过长按来删除ListView中的item数据。 首先,我们需要创建自定义Dialog的布局文件。在res/layout目录下创建一个新的XML文件,例如`dialog_...
你可以继承`BaseAdapter`、`ArrayAdapter`或`CursorAdapter`来实现自定义的适配器。你需要重写`getCount()`、`getItem()`、`getItemId()`和`getView()`方法,其中`getView()`是最重要的,它负责根据数据生成并返回...
ListView是Android中用于展示大量数据的视图组件,它通过复用视图(ViewHolder模式)实现了高效的滚动性能。在自定义左滑删除功能时,我们需要在ListView的每个Item上添加一个可滑动的视图层,并监听滑动事件。 1. ...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。在某些场景下,我们可能需要为ListView添加过滤功能,以便用户可以根据输入的关键字实时筛选显示的数据。在本教程中,我们将探讨如何实现一个...
为了提供更丰富的交互体验,开发者经常需要自定义ListView,实现如滑动删除Item等高级功能。本篇文章将详细讲解如何在Android中通过自定义控件来实现ListView的滑动删除功能。 首先,我们需要了解ListView的基本...
在Android开发中,自定义中文索引Listview是一项常见的需求,尤其在处理大量数据并需要快速定位时。本文将深入探讨如何实现这样一个功能,并提供一个名为`MyIndexableListView`的示例。 首先,理解Listview的基本...
自定义适配器类需要继承`BaseAdapter`,并在其中实现关键方法,如`getCount()`、`getItem()`、`getItemId()`以及最重要的`getView()`方法。这些方法分别负责获取数据数量、获取指定位置的数据、获取指定位置的数据...
本篇文章将详细探讨如何通过自定义ListView来实现单选功能,旨在帮助开发者解决这一问题。 一、自定义ListView的必要性 系统自带的ListView默认并未提供单选模式,而是多选或全选。当用户需要在列表中选择一个项目...