android listview的总结

listview mysql 安卓_Android——ListView与数据库的结合 前言ListView与数据库结合使用也是一种非常常见的手段。例如歌单的ListView,在我们重新启动应用的时候数据依旧存在,如下图:具体实现一、准备Activity和ListViewActivity要继承ListActivity或AppCompatActivity(推荐后者)ListView不需要先准备适配器Adapter,只需要初始化好ListView就行了二、创建数据库新建一个类MySQLi... 阅读详情

http://www.2cto.com/kf/201312/263617.html

一、ListView圆角:重写ListView的onInterceptTouchEvent方法,通过pointToPosition(x,y)方法判断当前点击位置所对应的项,有三种情况:分别是第一项、最后一项、中间项;其实第一种情况又分为两种情况:列表总共只有一项和列表不止一项;参照下边的代码即可理解;

 
复制代码
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
                int x = (int) ev.getX();
                int y = (int) ev.getY();
                int itemnum = pointToPosition(x, y);
                if (itemnum == AdapterView.INVALID_POSITION)
                        break;                 
                else{
                    if(itemnum==0){ // 选择项为1
                        if(itemnum==(getAdapter().getCount()-1)){// 列表只有一项                                    
                            setSelector(R.drawable.app_list_corner_round);
                        }else{ // 列表不止一项
                            setSelector(R.drawable.app_list_corner_round_top);
                        }
                    }else if(itemnum==(getAdapter().getCount()-1)) // 选择项为最后一项
                            setSelector(R.drawable.app_list_corner_round_bottom);
                    else{                            
                        setSelector(R.drawable.app_list_corner_shape);
                    }
                }
                break;
        case MotionEvent.ACTION_UP:
                break;
        }
复制代码
二、选中项高亮显示,实现ListView选中项高亮显示有两种方法;
 
1、查看ListView的方法setSelection(int index),看样子好像是,但实际试了之后以现不行,既然不行,那就用一个比较笨的方法:自定义adapter,在adapter的getView方法里面设置背景;然后在ListView的onItemClick回调中向adapter传入点击的项,即可设置选中项高亮状态;
 
复制代码
    public void setSelectedposition(int selectedposition) {
        this.selectedposition = selectedposition;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = inflater.inflate(R.layout.item, null);
        if (selectedposition == position) {
            v.setBackgroundColor(Color.parseColor("#36adcf"));
        } else {
            v.setBackgroundColor(Color.TRANSPARENT);
        }
        return v;
    }
复制代码
2、有没有更简单的方法?第一种方法看着觉得有点怪怪的,有点歪门邪道的感觉;另一种的方法是通过selector方法实现;定义一个drawable文件,里面包含一个选择状态:state_activated,然后将这个drawable指定为ListView的item的背景;关于这个状态具体含意不再多说,参见官方api;
 
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/adcf" android:state_activated="true"></item>
    <item android:drawable="@android:color/transparent"/>
</selector>
下面是在代码中的实现(部分代码):
 
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        getListView().setItemChecked(position, true);
    }
注:上面的方法是ListActivity的方法,此方法对应OnItemClickListener接口中的方法;
 
三、ListView列表项延迟加载
 
我们都知道当ListView上面滚动时,会执行adapter的getView方法,但问题出来了,有时候为了节约资源及解决效率问题,并不需要滚动到某一项就开始加载数据,而是希望滚动停止,或者说滚动速度低于某一个值时才获取数据,下面讨论的就是这种情况下的处理:
 
1、为ListView添加OnScrollListener滚动监听器,此监听器可以获取当前滚动状态及可视条目;
 
复制代码
    public int first = 0; // 第一条可视项目
    public int visi = 0; // 可视条目总数
 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        first = firstVisibleItem;
        visi = visibleItemCount;
    }
 
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        switch (scrollState) {
        case OnScrollListener.SCROLL_STATE_IDLE: // 滚动完成
            mBusy = false;
            int first = view.getFirstVisiblePosition();
            for (int i = 0; i < visi; i++) { // 设置所有可视条目Tag为null,条目将会自动加载数据
                TextView t = (TextView) view.getChildAt(i);
                if (t.getTag() != null) {
                    t.setText(mStrings[first + i]);
                    t.setTag(null);
                }
            }break;
        case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: // 正在滚动(手指未离开屏幕)
            mBusy = true;
            break;
        case OnScrollListener.SCROLL_STATE_FLING: // 正在滚动(手指已离开屏幕)
            mBusy = true;
            break;
        }
    }
复制代码
在Adapter中根据mBusy状态,判断是否立即加载数据,重写getView方法;
 
复制代码
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView text;
            if (convertView == null) {
                text = (TextView) mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
            } else {
                text = (TextView) convertView;
            }
            if (!mBusy) {
                text.setText(mStrings[position]);
                // Tag为空代表当前View的数据已经加载完成
                text.setTag(null);
            } else {
                text.setText("Loading...");
                // 非空的View代表当前View仍然需要加载更多的数据
                text.setTag("cc");
            }
            return text;
        }
    }
复制代码
四、类似聊天记录,自动将新添加的项从底部添加并显示到可见区域,主要是两个属性的设置,如下:
 
复制代码
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:stackFromBottom="true"       自动显示到列表最底部
        android:transcriptMode="normal" />   设置当显示大量的条目时,希望将最新的item显示到可见区域
复制代码
顺便记录一下输入框点击Enter事件,OnKeyListener(参照下面的代码,可实现输入新消息按下Enter并将新消息添加到列表底部);
 
复制代码
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
            case KeyEvent.KEYCODE_DPAD_CENTER:
            case KeyEvent.KEYCODE_ENTER:
                // TODO
                return true;
            }
        }
        return false;
    }
复制代码
五、设置部分条目不可用:通常情况下,一个列表中的所有条目都可以使用,也即可以响应点击事件和有点击的效果,但有的情况下,并不希望所有的条目都这样,就可以自定义Adapter,通过条目的相关属性判断是否可用,(disEnabled状态下,默认的分割条不显示)
 
复制代码
        @Override
        public boolean areAllItemsEnabled() {
            return false;
        }
 
        @Override
        public boolean isEnabled(int position) {
            // TODO 通过一定的判断条件设置position条目可用
        }
复制代码
六、ListView点击条目展开条目显示更多信息:这种情况也是比较常见的,最多见的应该是评论,一个评论列表,不同的人,评论的内容长度不同,如果全部显示完,就会显示得参差不齐,但又不能只显示了部分,此时就得添加点击条目查看更多的功能了;
 
  简单说下思路:自定义一个View,继承自FrameLayout,里面有两个TextView,一个是单行的(singleLine),另外一个是多行的(wrap_content);公开一个方法设置多行的TextView的可见状态为VISIBLE或者GONE,在ListView的ItemClick回调中设置当列表条目未展开时,点击条目展开条目,也即显示更多信息;当列表是展开的,点击收起条目;并且通知数据源改变:notifyDataSetChanged;
 
七、在二中说了选中单项的高亮显示,现在来看看多选的高亮显示,同样,多选我这里也知道两种方法;
 
1、同二中第2种方法,定义一个selector,里面包含一个选择状态state_activited,将此drawable设置为ListView的selector或者是直接设置为条目的背景;此种模式类似于4.0之后部分手机短信列表的长按之后进行选择条目然后进行操作删除的效果;
 
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); // 设置选择模式
        lv.setMultiChoiceModeListener(new ModeCallback());
复制代码
    private class ModeCallback implements ListView.MultiChoiceModeListener {
        public boolean onCreateActionMode(ActionMode mode, Menu menu) { // 在ActionBar上创建按钮
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.list_select_menu, menu);
            mode.setTitle("Select Items");
            return true;
        }
 
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return true;
        }
 
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            switch (item.getItemId()) {
              // TODO 点击某一个按钮的回调
            }
            return true;
        }
 
        public void onDestroyActionMode(ActionMode mode) {
        }
 
        public void onItemCheckedStateChanged(ActionMode mode, int position,
                long id, boolean checked) { // 选择项改变回调事件,通过此方法获取选择了哪些项
            final int checkedCount = getListView().getCheckedItemCount();
            }
        }
    }
复制代码
2、第二种方法比较简单些,适用范围更加广泛,上一种方法在2.x的版本上运行会出错,因为MultiChoiceMode是高版本上的新的一个接口;对于低版本的手机,下面这种方法更加适用(Item的背景或者selector同上);
 
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
如果需要获取此种方法的选择项,就需要在OnItemClickListener的回调方法中进行判断,即每点击一项,改变当前checked的值,最后再获取结果;
Android ListView实现拖拽效果的超炫特效 在上述代码中,我们创建了一个空的ClipData对象,作为拖拽操作的数据。这里我们使用了ListView的setOnDragListener()方法来监听拖拽事件,当拖拽操作进入ListView时,我们将更新列表项的位置。通过长按列表项启动拖拽操作,并在拖拽过程中更新列表项的位置,我们可以实现一个交互性强、视觉效果炫目的用户界面。在拖拽操作完成后,我们通过获取被拖拽视图的父容器,并更新其在ListView中的位置,实现拖拽项的移动效果。在项目的布局文件中,我们将使用ListView作为容器来展示列表项。 阅读详情

相关推荐

android listview item背景色点击效果实例

android listview 列表点击时改变点击颜色效果,本人抽空开发,亲测,有需要的可以下载

Android ListView各种效果实现总结,持续更新...

一、ListView圆角:重写ListView的onInterceptTouchEvent方法,通过pointToPosition(x,y)方法判断当前点击位置所对应的项,有三种情况:分别是第一项、最后一项、中间项;其实第一种情况又分为两种情况:列表总共只有一项和列表不止一项;参照下边的代码即可理解; @Override public boolean onIntercept...

weixin_34133829的博客 247

Sentaurus TCAD 实战指南:几何、掺杂与物理模型对Ion/Ioff的协同调控

本文详细介绍了Sentaurus TCAD在器件仿真中的实战应用,重点解析了Ion(开态电流)与Ioff(关态电流)的协同优化方法。通过几何结构设计、掺杂工程和物理模型选择三大要素的精细调整,实现器件性能的显著提升。文章结合28nm和7nm工艺案例,展示了如何平衡Ion与Ioff的矛盾关系,为TCAD工程师提供实用指导。

weixin_29159711的博客 135

android listview 按钮样式,Android开发实现ListView点击item改变颜色功能示例

Android开发实现ListView点击item改变颜色功能示例本文实例讲述了Android开发实现ListView点击item改变颜色功能。分享给大家供大家参考,具体如下:一、先看看效果图:二、实现步骤:1. xml布局android:id="@+id/left_listview"android:layout_width="match_parent"android:layout_height=...

weixin_33427833的博客 1318

Cursor生成JAVA相关的关键词提示规则

你是 Java 编程、Spring Boot、Spring Framework、Maven、JUnit 及相关 Java 技术的专家。在项目根目录创建一个.curstorrules文件(注意有个小数点),之后在该文件内填入下面内容。始终遵循 SOLID 原则,保持高内聚低耦合的 Spring Boot 应用设计。Java 和 Spring Boot 使用规范。Spring Boot 具体规范。

kitonGao的博客 2115

海康工业相机使用:常见问题及解决方法

工业相机在使用过程中,经常会因为操作不当、使用环境不当等原因出现一些问题,本篇教程,主要针对海康工业相机常见问题及其定位方法做以简单介绍,希望可以帮助大家。 注:该教程对其他品牌工业相机“常见问题”排查,也具备一定的指导意义。 当出现无法通过客户端发现设备或者无法预览图像等问题,先确认当前的运行环境是否满足以下要求: 确认装有相机驱动软件的电脑网卡为千兆网卡(Gige接口相机); 确认网卡是否已开启巨型帧; 确认电脑与网口相机之间的网络链路为千兆; 确认装有相机驱动软件的USB接口为3...

Cche的博客 3万+

解决 listview 人工设置选择值 setSelection(position) 无效

貌似 人工设置 Listview中某一项为 选中, 使用    setSelection(position)无效。 查了一下, 需要在 适配器里解决

mfc2003的专栏 8340

第六章 汇川技术InoProShop入门之modbusTCP从站协议解读

摘要:ModbusTCP从站协议是Modbus协议在TCP/IP网络上的扩展,作为服务器端被动响应主站请求。它采用MBAP+PDU帧结构,通过IP地址和502端口实现网络通信,支持标准功能码(如读/写寄存器、线圈)。相比传统串行Modbus,具有高速传输、远距离通信优势。从站需解析请求、执行操作并返回响应,同时处理错误校验和并发连接。该协议广泛应用于智能传感器、PLC等工业设备,实现高效可靠的主从数据交互。

zyfucking2010的博客 1435

android listview点击效果,,android中ListView点击效果保持

public class NoticeActivity extends BaseActivity {private ListView listview;private Notice_Service service;private NoticeAdapter adapter;private int state[];//用来记录我们条目中的状态,它的长度等于我们listView的条目数private ...

weixin_29064103的博客 387

【科研学习】Demo3D2015安装包以及图文安装步骤

安装包 点击下图的.exe文件,安装 不需要解压,打开注册机 如下图: 点击上图的.exe文件,出现下图 先点击 patch 打开安装目录下的Demo3D.licensing.dll文件,然后点击Generate,生成dvt-license文件,保存即可 打开安装完成的Demo3D 2015(64-bit),一般破解没完成的,会出现一个request a license 的问题,点击find license 的那一行 点击后找到自己Generate,生成dvt

KaelCui的博客 1万+

深度学习之常用算子介绍

打开 onnx 模型图,可以看到它是一个有向无环图。除了 Input、Output ,其他都是算子(是操作,而不是节点)在ONNX(Open Neural Network Exchange)模型中,除了输入和输出,其他都是算子(Operations)。算子是表示神经网络模型中的不同操作或层的元素。一个ONNX模型由一系列算子组成,通过连接这些算子来定义模型的计算流程。

ueke1的博客 8459

Android安卓开发基础-ListView

介绍安卓控件ListView在java文件及xml文件中的使用

weixin_53743049的博客 730

最新扣子(coze)案例:在coze上用DeepSeek+私有数据库、知识库,创建你的专属智能体

Gartner预测,到2026年,70%的企业将通过Al知识库实现「组织记忆外化」。数字化时代,数据已成为企业发展的核心资产。我们通过人工智能将知识库从“静态存储"升级为“智能服务”。让"沉睡宝藏"焕发新生,助力企业突破数据困局。

weixin_72689845的博客 2163

listview mysql 安卓_android ListView详解

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理,并写了个小例子,如下图。列表的显示需要三个元素:1.ListVeiw 用来展示列表的View。2.适配器 用来把数据映射到ListView上的中介。3.数据 具体的将被映射的字符串,图片,或者基本组件。根据列表的适配器类型,列表分为三种,Ar...

weixin_39980129的博客 254

保姆级教程:用vxe-grid给管理后台加个「智能筛选」功能(支持模糊搜索/多选/范围查询)

本文提供了一份详细的Vxe-Grid智能筛选功能实现教程。通过自定义筛选器渲染,文章逐步指导开发者为后台管理系统添加支持模糊搜索、多选下拉和数值范围查询的智能筛选功能,并分享了性能优化与移动端适配等实战经验。

weixin_29021291的博客 536

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android中的 listview控件,安卓基础之ListView控件

ListView控件ListView是我们Android中最重要的控件之一,是用于对数据进行列表展示的控件。ListView的特点: 屏幕上可以展示几个控件, ListView就初始化几个,节省内存,防止内存溢出。 通过使用convertView对创建的视图对象进行复用,ListView始终保持创建的对象个数为: 屏幕显示的条目的个数 + 1。 ListView自带ScrollV...

weixin_39832628的博客 951

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

安卓Android Studio 控件之 卡片式ListView效果

在安卓APP开发过程中,ListView是常用的数据展示控件,不过系统自带的样式过于单调,而且显示数据单一。下面介绍一个卡片式的ListView控件。同样是经过测试,拿来主义,根据步骤一步步就能实现。 首先总体介绍一下思路:还是使用ListView控件,但是样式需要自己定义一个xml文件,在ListView控件引用样式时调用自己定义的xml文件即可。 主要功能:以卡片样式显示数据,卡片内数据可以实现点击事件的操作。以便于下一步操作选中的数据。 先上效果图: 下面介绍实现过程: 1、在a...

jackiesky1206的博客 6404

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

listview mysql 安卓_Android ListView

Android ListView是一个组几个项目,并显示在垂直滚动列表。列表项会使用适配器自动插入到列表中,从内容源,如数组或数据库。一个适配器实际上UI组件和数据源之间的桥梁,填充数据到UI组件。适配器可以用来提供数据如:spinner,列表视图,网格视图等。ListView和GridView 是 AdapterView 的子类,它们可以填充绑定到一个适配器,它从外部源检索数据,并创建一个视图表...

weixin_33772892的博客 293

android listview添加headview,安卓开发从零开始

5、设置item点击事件 lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { //position 如果有headview position =0 的第一个为headview Toast.makeText(MainActivity.this, “positi

m0_64319298的博客 1296

java 安卓 listview_Android 自定义ListView

本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定数据,通过contextView.setTag绑定数据有按钮的ListView。系统显示列表(ListView)时,首先会实例化一个适配器,本文将实例化一个自定义的适配器。实现自定义适配器,必须手动映射数据,这时就需要重写getView()方法,系统在绘制列表的每一行的时候将调用此方法。ListVi...

weixin_35410816的博客 586

Android Studio 安卓开发学习---双ListView布局、ListView适配器、ListView分类实现

前言 学校要求做安卓项目,想实现一个食堂点餐的app,初学Java,有很多不足,下面仅作为个人经验的分享。欢迎大佬的指点,也希望对后来的同学有用。 1. 双 ListView 布局 我碰到的第一个难题是双ListView如何实现,其实很简单,只需要在一个xml中,使用一个线性布局即可。 为了实现日后的双ListView联动这是必不可少的第一步,关于ListView联动我日后在写。 <?xm...

weixin_43990171的博客 1714

安卓Android开发:listView+checkbox的简单实现

安卓Android开发:listView+checkbox的简单实现 项目要用到列表显示并实现每一个条目item的选择。参考网上的listView案例基本上都是在getview处用 holder 作tag来完成的。我用了一下但是在滚动过程中经常出现错乱。holder方案的思路就是只加载显 示部分的数据。这样做的优势是更高效,特别是item数据比较多的情况下。我这里用的方法是在调用数 据表格

jstaxi的专栏 958

android布局 listview,安卓布局如何让 listview 和listview上的布局一起滚动

xml布局如下 但是不能实现我说的listview 和上面布局一起滚动android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical">android:l...

weixin_35433930的博客 277

安卓Android开发,左边listView右边Fragment切换页面

安卓Android开发,左边listView右边Fragment切换页面

m0_63222566的博客 2262

listview组件android,安卓基础之ListView控件

ListView控件ListView是我们Android中最重要的控件之一,是用于对数据进行列表展示的控件。ListView的特点: 屏幕上可以展示几个控件, ListView就初始化几个,节省内存,防止内存溢出。 通过使用convertView对创建的视图对象进行复用,ListView始终保持创建的对象个数为: 屏幕显示的条目的个数 + 1。 ListView自带ScrollV...

weixin_39536728的博客 332

android listview onclick,请教,安卓listview点击事件

这个程序是有点小题大做。问题是这样的,我程序中没有给listView加上Onclicklistener监听啊,为什么运行后,我随意点击任何一个ListView的items时候都弹出footer呢?看程序吧:主程序:package com.example.NotifyDataSetChangeDemo;import android.app.Activity;import android.os.Bun...

weixin_39850697的博客 293
上一篇: webview flash 需要手机安装flash apk 否则白屏
下一篇: android edittext点击空白处键盘消失
anskya520
博客等级 码龄20年 46粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值