`
bd2007
  • 浏览: 389317 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

使用自定义的BaseAdapter实现LIstView的展示

    博客分类:
  • java
阅读更多
    [size=medium;]使用自定义的baseadapter实现listview的展示[/size]
 
[size=small;]实现以下功能点:[/size]
 
[size=medium;]1.通过自定义的baseadapter展示listview;[/size]
[size=medium;]2.动态修改、刷新listview内容;[/size]
[size=medium;]3.在自定义的baseadapter中实现listview内容的点击和长按点击事件;[/size]
[size=medium;]4.在baseadapter的getview方法中动态增加新组件;[/size]
 
 
 
[size=small;]效果图如下:[/size]
 
 
 
<span style="color: #008000; font-size: large;">xml配置文件1(list_view01.xml)</span>
<?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>
  
<span style="color: #008000; font-size: large;">xml配置文件2(list_view01_item.xml)</span>
<?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>
 <span style="color: #008000; font-size: large;">activity类代码:</span>
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;	}	}
 <span style="color: #008000; font-size: large;">person类代码</span>
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;	}}
 
<span style="color: #008000; font-size: large;">自定义的baseadapter类代码</span>
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;	}}
 <span style="color: #008000; font-size: medium;">menuentity类代码:</span>
 
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;	}			}
  
 
 
 
 
 
 
 
 
0
1
分享到:
评论

相关推荐

    ListView的使用自定义BaseAdapter

    至此,我们已经掌握了在Android Studio中使用ListView和自定义BaseAdapter的基本步骤。通过这种方式,你可以灵活地展示各种类型的数据,并且可以通过扩展Adapter来实现更复杂的功能,如点击事件、长按事件等。在实际...

    用BaseAdapter实现的ListView

    总结来说,"用BaseAdapter实现的ListView"意味着开发者通过自定义适配器的方式,将数据源与ListView进行了绑定,实现了数据的动态加载和视图的个性化呈现。BaseAdapter的灵活性使得开发者能够完全控制ListView的显示...

    自定义BaseAdapter实现ListerView

    自定义BaseAdapter操作步骤实现Listview的界面显示,操作简易

    BaseAdapter_listview

    本示例"BaseAdapter_listview"正是通过自定义BaseAdapter来实现ListView的展示。 首先,我们要理解`Adapter`的概念。Adapter是数据源和UI控件之间的桥梁,它将数据转换成可以被View显示的格式。在ListView中,每个...

    json从网上下载解析,用baseadapter,listview显示

    3. 创建自定义BaseAdapter,将Java对象列表作为数据源。 4. 设置ListView的Adapter为自定义的BaseAdapter。 5. ListView会自动调用Adapter的getView()方法,根据数据生成并显示列表项。 总结,JSON的解析和显示是...

    Android自定义adapter的listview

    - 视图复用:为了提高性能,ListView使用了convertView机制。在getView()中,如果convertView不为空,那么我们可以复用这个已经创建过的View,避免频繁地创建新View。 - 数据绑定:使用findViewById()获取View,...

    使用BaseAdapter完成listview中带图片item

    通过自定义BaseAdapter,我们可以控制ListView中的每一项如何显示,包括添加图片。 1. **创建布局文件**: 首先,我们需要为ListView的每个Item创建一个布局文件。这个布局通常会包含一个ImageView和一个TextView,...

    可复用的自定义BaseAdapter

    可能是展示自定义BaseAdapter在实际应用中的截图,显示了适配器如何将数据呈现到屏幕上的视图组件中,比如ListView的各个条目。 通过以上所述,我们可以理解自定义BaseAdapter在Android开发中的重要性和实现方式,...

    Android_BaseAdapter_ListView

    在提供的"ListViewTeacheing"文件中,可能包含了一个示例项目的源代码,包括一个自定义的BaseAdapter实现以及如何在Activity中使用这个Adapter与ListView进行交互。通过学习这个例子,你可以更好地理解上述步骤,并...

    安卓listview相关相关-自定义控件实现listView中的图片轮换.rar

    - 为了高效地加载大量数据,ListView使用了视图复用机制(View Recycling),只有当前可见的Item会被渲染,其他Item会复用已存在的View,从而节省内存和提高性能。 2. **自定义Adapter** - 在ListView中,数据...

    自定义dialog实现listview长按删除item数据

    本文将深入探讨如何实现一个自定义Dialog来展示ListView,并且允许用户通过长按来删除ListView中的item数据。 首先,我们需要创建自定义Dialog的布局文件。在res/layout目录下创建一个新的XML文件,例如`dialog_...

    TabHost中填充自定义ListView

    你可以继承`BaseAdapter`、`ArrayAdapter`或`CursorAdapter`来实现自定义的适配器。你需要重写`getCount()`、`getItem()`、`getItemId()`和`getView()`方法,其中`getView()`是最重要的,它负责根据数据生成并返回...

    自定义左滑删除ListView

    ListView是Android中用于展示大量数据的视图组件,它通过复用视图(ViewHolder模式)实现了高效的滚动性能。在自定义左滑删除功能时,我们需要在ListView的每个Item上添加一个可滑动的视图层,并监听滑动事件。 1. ...

    实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。在某些场景下,我们可能需要为ListView添加过滤功能,以便用户可以根据输入的关键字实时筛选显示的数据。在本教程中,我们将探讨如何实现一个...

    Android开发--自定义控件实现listview的滑动删除item

    为了提供更丰富的交互体验,开发者经常需要自定义ListView,实现如滑动删除Item等高级功能。本篇文章将详细讲解如何在Android中通过自定义控件来实现ListView的滑动删除功能。 首先,我们需要了解ListView的基本...

    自定义中文索引Listview

    在Android开发中,自定义中文索引Listview是一项常见的需求,尤其在处理大量数据并需要快速定位时。本文将深入探讨如何实现这样一个功能,并提供一个名为`MyIndexableListView`的示例。 首先,理解Listview的基本...

    android 自定义ListView实现单选

    本篇文章将详细探讨如何通过自定义ListView来实现单选功能,旨在帮助开发者解决这一问题。 一、自定义ListView的必要性 系统自带的ListView默认并未提供单选模式,而是多选或全选。当用户需要在列表中选择一个项目...

    Android ListView控件的使用(自定义适配器 + ListView + 解决OOM )

    本教程将深入讲解如何使用ListView,结合自定义适配器以及解决Out-Of-Memory(OOM)问题。 首先,`ListView`是一个可滚动的视图,它能够显示一行行的数据。它通过Adapter来获取数据并将其渲染为可视化的列表项。...

    Android之自定义Adapter的ListView

    接着,创建了一个名为`ListViewAdapter`的自定义Adapter,继承自`BaseAdapter`,并传入上下文和数据集作为构造函数参数。然后,通过`listView.setAdapter(listViewAdapter)`将Adapter绑定到ListView上。 在`getView...

    Android自定义可扩展ListView

    实现自定义可扩展ListView,我们需要关注以下几个关键点: 1. **数据模型**:设计一个数据模型来存储列表项的信息,包括是否展开的状态、子项列表等。例如,可以创建一个`ExpandableItem`类,包含标题、子项列表和...

Global site tag (gtag.js) - Google Analytics