android 常用的listview管理示例
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管理示例相关推荐
- android 获取权限管理,Android常用权限获取和设置
Android常用权限获取和设置 1 活动管理器 权限 代码 ActivityManager activityManager = (ActivityManager) getSystemService( ...
- android评论嵌套,android 嵌套的listview示例(可参照实现朋友圈评论)
android 嵌套的listview示例(可参考实现朋友圈评论) 最近在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题.其实,主要解决里面那一层的listview的 ...
- android 分组 listview,Android实现的ListView分组布局改进示例
本文实例讲述了android实现的listview分组布局改进方法.分享给大家供大家参考,具体如下: 由于是在网上转载的一篇文章,在这里就不多说废话了,首先看一下最终的效果图: 然后是实现该listv ...
- android 评论的展开功能,Android开发实现ListView点击展开收起效果示例
本文实例讲述了Android开发实现ListView点击展开收起效果.分享给大家供大家参考,具体如下: 废话不说先上效果: 实际上这是采用一个ExpandableListView实现的 布局文件很简单 ...
- android 展开收起功能,Android开发实现ListView点击展开收起效果示例
本文实例讲述了Android开发实现ListView点击展开收起效果.分享给大家供大家参考,具体如下: 废话不说先上效果: 实际上这是采用一个ExpandableListView实现的 布局文件很简单 ...
- Android常用开源项目
Android开源项目第一篇--个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progre ...
- Android常用面试题大全
1.TCP和UDP之间的区别?什么是URL ? TCP被称为用户数据报协议;UDP被称为信息传输控制协议;URL被称为统一资源定位符,通过统一资源定位符可以唯一定位到互联网上的某个资源(图片.视频.音 ...
- android 常用框架整理
文章目录 UI 框架 WebView 框架 具体内容 UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其他 动画 网络相关 网络连接 网络测试 图像获取 响应式编程 地图 ...
- Android常用酷炫控件(开源项目)github地址汇总
转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...
最新文章
- docker 安装MongoDB以及设置用户
- Boost:bind绑定的转发测试
- netty系列之:搭建自己的下载文件服务器
- eclipse java类图_eclipse中。green UML 自动生成类图
- 剑指offer之删除链表中重复的结点
- ICDAR发票识别冠军(文字检测Corner)
- c语言实现md5比java难_浅谈md5弱类型比较和强碰撞
- python制作一个桌面小工具
- linux c语言 取随机数,C语言 获取随机数
- 将字符串数组含有特定字符的值输出{“张三丰“,“张翠山“,“张无忌“,“宋远桥“,“莫声谷“,“俞正声“}
- 如何在Mac上使用QuickTime Player 录制影片?
- Sicily.1059. Exocenter of a Trian(求垂心,向量旋转)
- eNSP解决OSPF不规则区域几个方法和vlink-peer
- 苏宁易购商品详情API接口
- Qt实战:云曦日历篇
- 指点迷津 北大教授告诉你什么是 C语言!
- Spark入门知识--Day7
- 笔记31-JDBC连接池JDBCTemplate
- 电脑中rar压缩文件的密码忘记了怎么办?
- php怎么实现登录后管理员和普通会员的不同的登录页面_智学网怎么登录 智学网怎么查分数 智学网统一登录平台网址分享https://www.zhixue.com/login.html...
热门文章
- BUFF 基于区块链技术的虚拟游戏经济平台
- FPGA工程师自述:实践中获得经验 多动手才是王道
- 天干地支计算公式_什么是天干地支?天干地支有哪几个?计算方法是什么?
- 游戏服务器框架php,golang -Pitaya 游戏服务器框架中文API教程
- Java组合设计模式
- python+KLT光流法匹配
- 关于“定金”的法律规定及司法解释
- 移动超级sim卡 无法下载卡_四川移动开售5G超级SIM卡 与小米手机组“超米CP”
- 中一科技通过上市注册:原实控人汪汉平过世 姐弟仓促接班
- QT5 FTP库编译