使用自定义的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"><LinearLayoutandroid: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 {//定义PersonList<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, "取消"),  };  @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.list_view01);//获取组件listView01 = (ListView)findViewById(R.id.listView01);editTextPersonName = (EditText)findViewById(R.id.editText01Edit);//显示ListViewinitListAllPersons();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(){@Overridepublic 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(){@Overridepublic 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(){@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {Toast.makeText(getApplicationContext(), "[OnItemSelectedListener:onItemSelected]点击了:"
+persons.get(position).name, Toast.LENGTH_SHORT).show();}@Overridepublic void onNothingSelected(AdapterView<?> parent) {Toast.makeText(getApplicationContext(), "[OnItemSelectedListener:onNothingSelected]点击了", Toast.LENGTH_SHORT).show();}});//ListView组件:创建上下文菜单listView01.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){@Overridepublic 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());  }  }});}//监听选择上下文菜单的选择事件@Overridepublic boolean onContextItemSelected(MenuItem item) {//选中的上下文菜单的itemIdint itemId = item.getItemId();//获取上下文菜单点击的ListView的位置(position)属性AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();int position = info.position;//ToastToast.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;}@Overridepublic int getCount() {return (persons==null)?0:persons.size();}@Overridepublic Object getItem(int position) {return persons.get(position);}@Overridepublic long getItemId(int position) {return position;}public class ViewHolder{TextView textViewItem01;TextView textViewItem02;TextView textViewItem03;ImageView imageView;}@Overridepublic 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个ImageViewviewHolder.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(){@Overridepublic void onClick(View v) {Toast.makeText(context, "[textViewItem01.setOnClickListener]点击了"+person.name, Toast.LENGTH_SHORT).show();}});//对ListView中的每一行信息配置OnClick事件convertView.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {Toast.makeText(context, "[convertView.setOnClickListener]点击了"+person.name, Toast.LENGTH_SHORT).show();}});//对ListView中的每一行信息配置OnLongClick事件convertView.setOnLongClickListener(new OnLongClickListener(){@Overridepublic 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;}}

  

转载于:https://www.cnblogs.com/regalys168/p/4803036.html

自定义的BaseAdapter实现LIstView的展示相关推荐

  1. Android BaseAdapter与ListView的使用

    Android BaseAdapter与ListView的使用 定义:BaseAdapterextends Objectimplements ListAdapter SpinnerAdapter Ba ...

  2. android怎么设置适配器,Android之自定义实现BaseAdapter(通用适配器三)

    在上一篇中,我们说过,在setData中如果有很多控件的话,我们还是要在该方法中写入很多代码,为了降低开发的方便性,本次就在此基础上再一次优化.实现原理是这样的,每次在setData中都要查找控件,然 ...

  3. Android 绿豆通讯录【 SQLite数据库(增删改查、展示数据) + ListView数据展示控件(展示所有数据) 】

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  4. 自定义类在PropertyGrid上的展示方法

    自定义类在PropertyGrid上的展示方法 零.引言 PropertyGrid用来显示某一对象的属性,但是并不是所有的属性都能编辑,基本数据类型(int, double等)和.Net一些封装的类型 ...

  5. Android项目实战(十五):自定义不可滑动的ListView和GridView

    不可滑动的ListView (RecyclweView类似) public class NoScrollListView extends ListView {public NoScrollListVi ...

  6. 4、Flutter - 控件基础 (二)ListView 列表展示数据、布局

    ListView 列表展示数据.布局 接上篇,几点注意事项与说明 1.创建工程项目的时候,存放路径不要有中文,有中文会有警告,而且后面可能会有一些未知的问题. 如果有中文路径,创建完工程移动工程位置的 ...

  7. 简单图库软件的实现(联网下载图片保存到sdcard在Listview中展示,并作为ContentProvider为其他软件提供图库数据)

    先看效果图: 这就是一个可以联网的图库软件,下面我们来看看需求 业务需求 1.判断是否第一次运行,第一次运行,提示添加新条目 2.点击添加按钮,弹出对话框,输入图片网址和标题 3.下载图片保存到本地S ...

  8. 关于BaseAdapter在listView中的使用

    为什么80%的码农都做不了架构师?>>>    使用BaseAdapter首先要重写里面的四个方法: public int getCount()   //你的item的个数,也就是你 ...

  9. ListView使用BaseAdapter与ListView的优化

    2019独角兽企业重金招聘Python工程师标准>>> 在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据, ...

  10. Android ListView使用BaseAdapter与ListView的优化

    在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可 ...

最新文章

  1. Android面试题大集合
  2. Java线程之线程池
  3. 移动水政执法通系统 安卓Android客户端
  4. 关于jstl.jar引用问题及解决方法
  5. 【数据结构与算法】快排、归并 O(nlogn) 基于比较
  6. 史上最全Java多线程面试60题,含答案大赠送!
  7. Unknown symbol platform_driver_unregister (err 0)
  8. 力扣——206.反转链表
  9. 3.11-3.14 Hive 企业使用优化2
  10. 扫描软件(to be followed)
  11. C#调用新浪微博API生成RSS资源文件
  12. 如何将一个集合转换成json格式?
  13. 训练集和测试集样本分布一致性的判断方法
  14. python身份证号码解析编程_Python实现身份证号码解析
  15. HP5100常见错误代码
  16. 三星Note3开发者模式
  17. 【新手入门】deepfacelab的电脑配置要求
  18. 智慧数字经营要怎么代理加盟? 本文详解。
  19. UUIDUtil获取八位UUID
  20. 选手机壳要擦亮双眼,不会遮挡激光对焦传感器的才是好壳子!

热门文章

  1. mac input 不支持xls_如何将PDF转换成xls格式的表格
  2. [zz]c++可变参数函数使用
  3. Docker 搭建Spark 依赖singularities/spark:2.2镜像
  4. js 自定义DOM事件
  5. html标签--使用
  6. entity framework 动态条件
  7. Eclipse Egit 安装
  8. Eclipse下设置github开发环境
  9. BLOB存储图片文件二进制数据是非对错
  10. 系统中了莫名奇怪的毒,杀毒软件不起作用了,怎么办