listview作为一个常用控件,对listview的操作都应该滚瓜烂熟了。对listview 的数据管理也很熟悉。包括listview的单击,双击,多选删除,完成刷新,添加数据等等。我再次对listview的管理操作写了一个demo。里面包含我说的那些部分操作,根据这个demo可以参考实现自已多更能操作。

源码地址:下载

1、实现的效果

2、主要的代码

package com.example.listmanage;import java.util.ArrayList;
import java.util.LinkedList;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener ,OnCheckedChangeListener {class ItemStatus {public boolean mIsCheckBoxVisible = false;public boolean mIsCheckBoxSelected = false;}// 记录当前每个工程是否在UI上被选中private LinkedList<ItemStatus> mItemsExtendData;//listview的数据源private ArrayList<String> mList;private ListView mListView;//适配器private ListAdapt mListAdapt;private TextView mtextviewShow;//编辑或者完成private Button mbuttonEdit;//编辑,显示选择的checkboxprivate boolean mbStatueShow = false;// private arr@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initData();initView();}private void initView() {mListView = (ListView) findViewById(R.id.listView1);mListAdapt = new ListAdapt(this);mListView.setAdapter(mListAdapt);ToolUtil.ReCalListViewHeightBasedOnChildren(mListView);mListView.setOnItemClickListener(new ListItemonClick());mbuttonEdit = (Button)findViewById(R.id.buttonEdit);mbuttonEdit.setOnClickListener(this);CheckBox cBox = (CheckBox)findViewById(R.id.checkBox1);cBox.setOnCheckedChangeListener(this);TextView textviewDetele = (TextView)findViewById(R.id.textviewDetele);textviewDetele.setOnClickListener(this);mtextviewShow = (TextView)findViewById(R.id.textviewShow);mtextviewShow.setText("已选" +  String.valueOf(0) +  "项");findViewById(R.id.layoutBottom).setVisibility(View.GONE);findViewById(R.id.layoutBottomNew).setVisibility(View.VISIBLE);}private void initData() {mList = new ArrayList<String>();mList.clear();for (int i = 0; i < 25; i++) {mList.add("第 " + String.valueOf(i) + " 项");}InitListViewExtendData();SetShowStatus(false);}//设置每一项是选择checkbox的显示状态private void SetShowStatus(Boolean bStatueShow) {mbStatueShow = bStatueShow;if (mbStatueShow) {// 遍历listView的数据源,设置部分控件的隐藏和显示for (ItemStatus ItemData : GetItemsExtendData()) {ItemData.mIsCheckBoxSelected = false;ItemData.mIsCheckBoxVisible = true;}} else {// 遍历listView的数据源,设置部分控件的隐藏和显示for (ItemStatus ItemData : GetItemsExtendData()) {ItemData.mIsCheckBoxSelected = false;ItemData.mIsCheckBoxVisible = false;}         }if (mListAdapt != null) {//使用listview手动计算高度ToolUtil.ReCalListViewHeightBasedOnChildren(mListView);mListAdapt.notifyDataSetChanged();}}//listview的单击事件private class ListItemonClick implements OnItemClickListener{@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {CheckBox isSelectedCheckBox = (CheckBox)view.findViewById(R.id.checkBox1);//处理编辑状态的单击选择if (mbStatueShow) {if (isSelectedCheckBox != null) isSelectedCheckBox.setChecked(!isSelectedCheckBox.isChecked());return;}Toast.makeText(MainActivity.this, "单击" + String.valueOf(position), Toast.LENGTH_LONG).show();}}//适配器使用的内部类class ViewHolder {TextView titleTextView;CheckBox selectCheckBox;}class ListAdapt extends BaseAdapter implements OnCheckedChangeListener {private Context mContext;private LayoutInflater mLayoutInflater;public ListAdapt(Context context) {mContext = context;mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic int getCount() {return mList.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder vHolder = null;if (convertView == null) {vHolder = new ViewHolder();convertView = mLayoutInflater.inflate(R.layout.activity_main_list_item, null);vHolder.titleTextView = (TextView) convertView.findViewById(R.id.textView1);vHolder.selectCheckBox = (CheckBox) convertView.findViewById(R.id.checkBox1);convertView.setTag(vHolder);} else {vHolder = (ViewHolder) convertView.getTag();}vHolder.titleTextView.setText(mList.get(position));if (GetItemsExtendData().size() != 0) {ItemStatus itemStatus = GetItemsExtendData().get(position);if (itemStatus != null && vHolder.selectCheckBox != null) {vHolder.selectCheckBox.setTag(position);vHolder.selectCheckBox.setOnCheckedChangeListener(this);vHolder.selectCheckBox.setVisibility(itemStatus.mIsCheckBoxVisible == true ? View.VISIBLE: View.INVISIBLE);vHolder.selectCheckBox.setChecked(itemStatus.mIsCheckBoxSelected);}}return convertView;}@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {Integer nPosition = (Integer) (buttonView.getTag());GetItemsExtendData().get(nPosition.intValue()).mIsCheckBoxSelected = isChecked;// 获取当前的所有选中项个数 -- 如果数据较多的话,不可以这种方式int nSelectCount = 0;for (ItemStatus ItemData : GetItemsExtendData()) {if (ItemData.mIsCheckBoxSelected == true)nSelectCount += 1;}mtextviewShow.setText("已选" +  String.valueOf(nSelectCount) +  "项");}}// 初始化列表的额外数据private void InitListViewExtendData() {GetItemsExtendData().clear();int nItemCount = mList.size();for (int i = 0; i < nItemCount; i++) {ItemStatus itemData = new ItemStatus();GetItemsExtendData().add(itemData);}}private LinkedList<ItemStatus> GetItemsExtendData() {if (mItemsExtendData == null)mItemsExtendData = new LinkedList<ItemStatus>();return mItemsExtendData;}protected ArrayList<Integer> getRemoveCount() {// 获取需要删除的索引数组ArrayList<Integer> needRemoveItemsIndexArray = new ArrayList<Integer>();for (int i = 0; i < GetItemsExtendData().size(); i++) {ItemStatus itemData = GetItemsExtendData().get(i);if (itemData.mIsCheckBoxSelected == true)needRemoveItemsIndexArray.add(new Integer(i));}return needRemoveItemsIndexArray;}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.buttonEdit:if (mbStatueShow) {mbuttonEdit.setText("编辑");SetShowStatus(false);findViewById(R.id.layoutBottom).setVisibility(View.GONE);findViewById(R.id.layoutBottomNew).setVisibility(View.VISIBLE);}else {SetShowStatus(true);mbuttonEdit.setText("完成");findViewById(R.id.layoutBottomNew).setVisibility(View.GONE);findViewById(R.id.layoutBottom).setVisibility(View.VISIBLE);}break;case R.id.textviewDetele:ArrayList<Integer> needRemoveItemsIndexArray = getRemoveCount();// 删除指定项for (int i = needRemoveItemsIndexArray.size() - 1; i >= 0; i--) {mList.remove(needRemoveItemsIndexArray.get(i).intValue());}InitListViewExtendData();SetShowStatus(true);break;default:break;}}@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {switch (buttonView.getId()) {case R.id.checkBox1:if (isChecked) {for (ItemStatus ItemData : GetItemsExtendData()) {ItemData.mIsCheckBoxSelected = true;ItemData.mIsCheckBoxVisible = true;}      mtextviewShow.setText("已选" +  String.valueOf(mList.size()) +  "项");}else {for (ItemStatus ItemData : GetItemsExtendData()) {ItemData.mIsCheckBoxSelected = false;ItemData.mIsCheckBoxVisible = true;}       mtextviewShow.setText("已选" +  String.valueOf(0) +  "项");}if (mListAdapt != null) {ToolUtil.ReCalListViewHeightBasedOnChildren(mListView);mListAdapt.notifyDataSetChanged();}break;default:break;}}
}

3、手动计算listview高度工具类

package com.example.listmanage;import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;public class ToolUtil {public static void ReCalListViewHeightBasedOnChildren(ListView listView) {if (listView == null) return;ListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) return;int nTotalHeight = 0;for (int i = 0; i < listAdapter.getCount(); i++) {View listItem = listAdapter.getView(i, null, listView);listItem.measure(0, 0);nTotalHeight += listItem.getMeasuredHeight();}ViewGroup.LayoutParams params = listView.getLayoutParams();params.height = nTotalHeight + (listView.getDividerHeight()*(listAdapter.getCount()-1));}
}

xml布局文件就不贴了,有兴趣下载源码。不用下载积分的。
源码地址:下载

android 常用的listview管理示例相关推荐

  1. android 获取权限管理,Android常用权限获取和设置

    Android常用权限获取和设置 1 活动管理器 权限 代码 ActivityManager activityManager = (ActivityManager) getSystemService( ...

  2. android评论嵌套,android 嵌套的listview示例(可参照实现朋友圈评论)

    android 嵌套的listview示例(可参考实现朋友圈评论) 最近在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题.其实,主要解决里面那一层的listview的 ...

  3. android 分组 listview,Android实现的ListView分组布局改进示例

    本文实例讲述了android实现的listview分组布局改进方法.分享给大家供大家参考,具体如下: 由于是在网上转载的一篇文章,在这里就不多说废话了,首先看一下最终的效果图: 然后是实现该listv ...

  4. android 评论的展开功能,Android开发实现ListView点击展开收起效果示例

    本文实例讲述了Android开发实现ListView点击展开收起效果.分享给大家供大家参考,具体如下: 废话不说先上效果: 实际上这是采用一个ExpandableListView实现的 布局文件很简单 ...

  5. android 展开收起功能,Android开发实现ListView点击展开收起效果示例

    本文实例讲述了Android开发实现ListView点击展开收起效果.分享给大家供大家参考,具体如下: 废话不说先上效果: 实际上这是采用一个ExpandableListView实现的 布局文件很简单 ...

  6. Android常用开源项目

    Android开源项目第一篇--个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progre ...

  7. Android常用面试题大全

    1.TCP和UDP之间的区别?什么是URL ? TCP被称为用户数据报协议;UDP被称为信息传输控制协议;URL被称为统一资源定位符,通过统一资源定位符可以唯一定位到互联网上的某个资源(图片.视频.音 ...

  8. android 常用框架整理

    文章目录 UI 框架 WebView 框架 具体内容 UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其他 动画 网络相关 网络连接 网络测试 图像获取 响应式编程 地图 ...

  9. Android常用酷炫控件(开源项目)github地址汇总

    转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...

最新文章

  1. docker 安装MongoDB以及设置用户
  2. Boost:bind绑定的转发测试
  3. netty系列之:搭建自己的下载文件服务器
  4. eclipse java类图_eclipse中。green UML 自动生成类图
  5. 剑指offer之删除链表中重复的结点
  6. ICDAR发票识别冠军(文字检测Corner)
  7. c语言实现md5比java难_浅谈md5弱类型比较和强碰撞
  8. python制作一个桌面小工具
  9. linux c语言 取随机数,C语言 获取随机数
  10. 将字符串数组含有特定字符的值输出{“张三丰“,“张翠山“,“张无忌“,“宋远桥“,“莫声谷“,“俞正声“}
  11. 如何在Mac上使用QuickTime Player 录制影片?
  12. Sicily.1059. Exocenter of a Trian(求垂心,向量旋转)
  13. eNSP解决OSPF不规则区域几个方法和vlink-peer
  14. 苏宁易购商品详情API接口
  15. Qt实战:云曦日历篇
  16. 指点迷津 北大教授告诉你什么是 C语言!
  17. Spark入门知识--Day7
  18. 笔记31-JDBC连接池JDBCTemplate
  19. 电脑中rar压缩文件的密码忘记了怎么办?
  20. php怎么实现登录后管理员和普通会员的不同的登录页面_智学网怎么登录 智学网怎么查分数 智学网统一登录平台网址分享https://www.zhixue.com/login.html...

热门文章

  1. BUFF 基于区块链技术的虚拟游戏经济平台
  2. FPGA工程师自述:实践中获得经验 多动手才是王道
  3. 天干地支计算公式_什么是天干地支?天干地支有哪几个?计算方法是什么?
  4. 游戏服务器框架php,golang -Pitaya 游戏服务器框架中文API教程
  5. Java组合设计模式
  6. python+KLT光流法匹配
  7. 关于“定金”的法律规定及司法解释
  8. 移动超级sim卡 无法下载卡_四川移动开售5G超级SIM卡 与小米手机组“超米CP”
  9. 中一科技通过上市注册:原实控人汪汉平过世 姐弟仓促接班
  10. QT5 FTP库编译