YSpinner

android的数据绑定databinding示例 演示文字/数字输入项,switch,imageview与viewmodule实例的数据绑定, 简直明了, 一看就会. 立即下载

起因

工作中的一个需求,实现点击显示下拉列表,并且默认显示列表中的某个item,在github上找了一圈,找到一个“NiceSpinner”,样式合适,但是拓展性不够,于是有了本篇博客。

需求确定

spinner默认状态显示已选中的item内容,点击展开列表中不显示当前内容,即:{“one”,”two”,”three”},其中默认为“one”的话,列表只显示“two”,“three” 。

效果图如下

performance.gif

在xml中配置

<com.yspinner.widget.YSpinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/spinner_text_color" />

YSpinnerBaseAdapter


public abstract class YSpinnerBaseAdapter<T, D extends ViewDataBinding> extends BaseAdapter {

    ...

    public void setData(List<T> data) {
        this.data = data;
        notifyDataSetChanged();
    }

    //由于不显示选中项,默认展示size-1 个
    @Override
    public int getCount() {
        if (data != null) {
            return data.size() - 1;
        } else {
            return 0;
        }
    }

    /*
     * 用于外部取item数据
     */
    public T getItemData(int position) {
        return data.get(position);
    }

    /*
     * 用于渲染item,不作为外部取item数据
     * 此处的控制逻辑实现当前index不显示在列表中
     */
    @Override
    public T getItem(int position) {
        if (position >= mSelectedIndex) {
            return data.get(position + 1);
        } else {
            return data.get(position);
        }
    }

    public abstract String getItemContent(int position);

    public abstract void setData(T info, D dataBinding);

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            dataBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), layoutId, parent, false);
        } else {
            dataBinding = DataBindingUtil.getBinding(convertView);
        }
        //由子类实现具体数据绑定
        setData(getItem(position), dataBinding);
        dataBinding.executePendingBindings();
        return dataBinding.getRoot();
    }
}

自定义adapter继承YSpinnerBaseAdapter

//第一个泛型可传入任意自定义Object,此处用String测试
public class DemoAdapter extends YSpinnerBaseAdapter<String, SpinnerItemDataBinding> {

    public DemoAdapter(Context context, int layoutId) {
        super(context, layoutId);
    }

    //供Spinner调用显示内容的数据
    @Override
    public String getItemContent(int position) {
        return data.get(position);
    }

    @Override
    public void setData(String info, SpinnerItemDataBinding dataBinding) {
        if (dataBinding != null) {
            if (dataBinding.getModel() == null) {
                dataBinding.setModel(new SpinnerModel());
            }
            dataBinding.getModel().setItemText(info);
        }
    }

}

初始化数据进行测试

String[] arr = new String[] { "one", "two", "three", "four", "five" };
        DemoDataBinding demoDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        DemoAdapter adapter = new DemoAdapter(this, R.layout.layout_spinner_item);
        adapter.setData(Arrays.asList(arr));
        demoDataBinding.spinner.setAdapter(adapter);

注意事项
代码中用到了DataBinding,不大熟悉的可参考:

Android Data Binding(数据绑定)用户指南

Android Data Binding(视频资料,需要翻墙)

采用了DataBinding的Sample代码地址

代码地址: YSpinner

VFIO框架源码分析(一)- 从初始化到设备访问 本文深入剖析了Linux内核中的VFIO(Virtual Function I/O)框架,详细解读了其从初始化到设备访问的全过程。VFIO通过Container->Group->Device的层次化设计,利用IOMMU提供安全隔离,允许用户空间直接访问物理设备。文章基于Linux v5.15版本,重点分析了vfio_init模块入口、Container创建与配置、Group关联以及最终设备访问等关键环节,揭示了VFIO如何通过逐层授权机制构建安全可靠的设备直通模型,为虚拟化技术提供核心支持。 阅读详情

相关推荐

AMD 3D V-Cache技术解析:CPU缓存堆叠如何突破性能瓶颈

在半导体领域,缓存(Cache)是提升处理器性能的关键技术,其核心原理是在高速CPU核心与慢速主存之间建立数据中转站,以缓解“内存墙”问题。随着摩尔定律放缓,传统平面扩展缓存面临面积成本高、延迟增加等挑战。3D封装技术应运而生,通过垂直堆叠实现极致的互联密度与带宽,成为突破性能瓶颈的重要工程路径。这项技术的价值在于能以更优的功耗和延迟,显著提升缓存容量,从而改善游戏、科学计算等数据密集型应用的性能。以AMD 3D V-Cache为代表的Hybrid Bonding(混合键合)工艺,正是这一趋势的典型实践,它

weixin_30432579的博客 418

Android DataBinding 自定义 View 的双向绑定

本篇文章着重于写怎么实现DataBinding自定义 View 的双向绑定,理论和定义不再赘述。理论和定义可以参考这两篇博文: Android DataBinding (五) 自定义 View 的双向绑定 Databinding的使用(自定义控件的全局注入、布局绑定) 当然,这两篇博文也有具体实现的代码,十分感谢这两篇博主的博文参考! 首先说明一下这个自定义view的功能:MultiSel...

u011799045的专栏 5550

摄像头模组CCM简介

摄像头模组,全称Camera Compact Module,简写为CCM。CCM 包含几大件: 镜头(lens)、音圈马达(VCM)、传感器(sensor)、软板(FPC)、图像处理芯片(DSP)。工作原理:物体通过镜头(lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。摄像头模组主要由以下几个部分组成:镜头(Lens):将光线汇聚到图像传感器上。

m0_73482095的博客 1万+

【Android】DataBinding 最全使用解析

是谷歌官方在2015谷歌I/O大会发布的一个数据绑定框架,是MVVM模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。能够省去我们一直以来的步骤,大量减少 Activity 内的代码,也是中非常重要的一部分。

lucashu的博客 5407

ubuntu22.04 安装部署 openclaw

ubuntu22.04 安装部署 openclaw

nalanxiaoxiao2011的博客 1011

gtsam 学习十(ISAM2 理论)

翻译自:iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree 摘要 提出了一种新型的贝斯树处理稀疏矩阵,在转化为因子图,可以更好的求解平方根信息和映射问题。 文中提出了三个概念 使用概率密度项进行矩阵分解 介绍如何将矩阵分解转换为贝叶斯数和条件概率密度 基于贝叶斯树提供了一种新的系数非线性优化:ISAM2(进行重新排序和重新线性化,避免了批量更新) 问题描述 文章聚焦与如何用增量实时解决非线性问题, 利用增量即新的测量值实时更新估

weixin_37781153的博客 8411

Java安卓开发 Spinner 快速教程 附Demo

不需要使用adapater来绑定视图和数据,用ObservableArrayList<T>来存储元素,增删操作只需要在ObservableArrayList中进行就可以。values文件夹下新建array.xml文件(也可以直接在stings.xml文件里插入节点)增删元素可以通过adapter来操作(内部的ArrayList提供了增删的方法)'@array’表示array类型的节点,spinnerclass表示节点名字。array资源文件里的spinnerclass类。

weixin_70834415的博客 795

Pwntools不只是PWN:用它写个自动化Fuzz脚本,挖掘Linux命令行工具漏洞

本文探讨了如何利用Pwntools构建自动化Fuzz脚本,挖掘Linux命令行工具中的漏洞。通过详细的代码示例和实战案例,展示了Pwntools在Fuzzing中的高效性和灵活性,特别适合快速验证特定场景的安全问题。文章还提供了进阶技巧和避坑指南,帮助安全研究人员快速上手并提升测试效率。

weixin_28718345的博客 222

android DataBinding数据绑定流程

首先在build.gradle模块中开启databinding将enabled设置为true。 然后在布局文件中添加databinding Layout 并设置data variable指定名称与数据类 注:指定后控件操作全部以@为引用标识{}中填写引用方法或实例 在ViewModel类中添加数据与对数据的操作方法 在Main方法中 实例化 布局文件ActivityMainBinding 后引用 实例化ViewModel后引用 引用操作 binding=DataBindingUtil.se..

m0_59911218的博客 330

第1课:开篇扫盲——OpenClaw是什么?能帮你解决什么问题?(入门必看)

核心目标:学会安装、卸载、管理OpenClaw技能,自定义AI代理的性格与权限,让AI贴合自己的使用习惯。核心内容技能市场详解:ClawHub市场核心技能分类(办公、学习、开发、生活),热门技能推荐(web-search、文件处理、邮件管理)[superscript:3][superscript:4]。技能安装与卸载:终端命令实操(openclaw skill install/uninstall),技能更新与版本管理[superscript:3]。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1760

关于DEJA_VU3D - Cesium功能集专栏说明

专栏主要目的是对工作中基于Cesium实现过的功能进行整合,暂时打算一周2-3更的样子来更新,每一篇都会奉上完整源代码(尽可能把代码简洁一些)。功能实现大多数是自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小130个左右的功能,后续也会不断的更新。..........................................

总得学点什么的博客 2万+

Android的databinding(一)

此例子演示了输入项与viewmodule属性的双向绑定,也演示了如何将属性的数字与输入UI的互相转换 也演示了switch/spinner 与viewmodule属性的绑定 也演示了UI与事件处理的绑定 也演示了ImageView与viewmodule的属性绑定 示例代码下载 ...

rocklee的专栏 2112

Eplan设计师必会—伺服安全回路的设计方法

本文介绍了在EPLAN中设计伺服STO安全回路的方法。首先需查阅伺服驱动器说明书确定STO接线端子,重点关注双通道配置。设计步骤包括:使用黑盒子功能绘制驱动器外形,正确标注STO接线点,并连接安全继电器或PLC的安全输出。关键注意事项有:必须采用双通道独立布线,确保同步动作,遵循故障安全原则,使用常闭触点串联回路。文中以西门子V90和汇川伺服为例说明具体接线要求,并附有项目实例参考。

Qinmingyue13的博客 436

android dataBinding 简单demo

android { compileSdkVersion 28 defaultConfig { applicationId "com.example.wang.myapplication" minSdkVersion 20 targetSdkVersion 28 versionCode 1 version...

a2012s的专栏 568

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

基于DataBinding的基础View绑定库

github地址:[!https://github.com/itlwy/DBindingView](https://github.com/itlwy/DBindingView) Table of Contents[这里写链接内容](https://github.com/itlwy/DBindingView) 1. 写在前面 2. 缩略图 3. 如何引入 3.1. step1 3.2. s...

Weiye__Lee的博客 2255

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android自定义spinner下拉框实现的实现

说道android下拉框spineer,框架中虽有现成的控件,但实际效果可能并不是我们所需要的那种,如下图: 其实我们更需要的是像WEB那种风格,如图所示: 其实实现也很简单,就是自定义个popwindow就可以了 下面贴上代码片段: [java] view plaincopy p

Dream It Possible 7万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android DataBinding 的简单使用,@BindingAdapter通过xml传入参数

导入 同时开始dataBinding和viewBinding android { ... buildFeatures { dataBinding = true // for view binding : viewBinding = true } ... } 在kotlin中的一些问题 在kotlin中xml布局的跟节点必须是layout(不能FrameLayout等),否则会生成ViewBinding类而不是ViewDat

张雨的博客 4623

Android开发-数据绑定-DataBinding-AndroidStudio(三)多组数据绑定

多组数据绑定方式,使用include~~ 转载请注明出处:http://blog.youkuaiyun.com/iwanghang MainActivity.java: package com.iwanghang.databinding; import android.databinding.DataBindingUtil; import android.support.v7.app.Ap

iwanghang(一个播音与主持艺术专业、干过网游打金工作室,做过海鲜小吃排挡的新手程序员) 2312

Android Spinner 绑定键值对

这里给大家提供下绑定 spinner键值对的方法。 首先创建绑定模型BaseItem   public class BaseItem { public BaseItem(Integer id,String value){ this.setId(id); this.setValue(value); } private Integer...

正怒月神的博客 1400

Android数据绑定框架DataBinding,堪称解决界面逻辑的黑科技

去年谷歌 I/O大会上介绍了一个非常厉害的新框架DataBinding, 数据绑定框架给我们带来了很大的方便,以前我们可能需要在每个Activity里写很多的findViewById,不仅麻烦,还增加了代码的耦合性,如果我们使用DataBinding,就可以抛弃那么多的findViewById,省时省力。说到这里,其实网上也有很多快速的注解框架,但是注解框架与DataBinding想比还是不好用,

huihui_go2014的博客 789

Android Studio中Spinner控件的数据绑定实现

这里介绍使用集合在程序中为Spinner控件设定数据源,步骤如下:1、在Android Studio界面中,选择“Project”,然后展开"app"->"res"->"layout",打开activity_main.xml,添加一个Spinner控件,代码如下:<Spinner android:id="@+id/eduSpinner" android:layout

分享经验,共同进步. 2万+

浅谈Android dataBinding使用

1. 简介 在Google I/O 2015上,伴随着 Android M 预览版发布了DataBinding兼容函数库。DataBinding可以帮助开发者减少许多重复的代码编写,并且可以提高XML解析速度,同时可以配合MVVM框架提高代码可读性。 2. 使用方法 环境 编辑器:Android studio 4.1.1 语言:Kotlin 1.3.72 2.1 配置 在项目中使用 DataBinding 只需要在 build.gradle 的 android 配置项下添加如下代码即可使用 DataBi

weixin_43872442的博客 1360

Data Binding 从入门到精通

原文出自:http://blog.youkuaiyun.com/xx326664162/article/details/62048543 薛瑄的博客虽然官方给出了教程,Data Binding Library(Android Data Binding(数据绑定)用户指南),但是由于近来的更新,发现官方文档并没有更新。有时候看了官方文档,感觉还是不太清楚在讲什么,文章中有些地方我会从实战角度介绍一下,也拓展一些

薛瑄的博客 9166
上一篇: 自定义系统样式Notification
下一篇: 从0开始搭建MVP+ViewModel框架的android应用01---MVPVM诞生记
Yann_zhao
博客等级 码龄10年 3粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值