增加Android下spinner控件的点击下拉列表自动更新事件并实例应用--USB摄像头在spinner内下拉更新(二)

spinner,list数据刷新 每一个activity都是一种布局效果,其中包括下拉刷新,上啦加载更多,actionBar,模仿手机联系人布局,自定义spinner布局的使用 立即下载

增加Android下spinner控件的点击下拉列表自动更新事件并实例应用–USB摄像头在spinner内下拉更新(一)
转载注明:http://blog.youkuaiyun.com/hubbybob1/article/details/57492419
根据上一篇的内容,本文介绍带有点击下来列表自动更新的spinner的控件的使用方法,本程序是实现Android下USB摄像头的VID与PID的查看查找功能,主要是通过spinner实时的列出热插拔USB摄像头的VID和PID。
首先来介绍一下如何查找USB摄像头,usb设备的查询采用的是usbmanager

private UsbManager usbManager,usbManager1;
private UsbDevice usbDevice,usbDevice1;
usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);//获取USB服务

//获取USB的map,得到usb设备列表,这个列表不包括usb键盘和鼠标
HashMap<String, UsbDevice> map = usbManager.getDeviceList();
Collection<UsbDevice> usbDevices = map.values();
Iterator<UsbDevice> usbDeviceIter = usbDevices.iterator();

//通过哈希表遍历USB设备
while (usbDeviceIter.hasNext()){
        ud = usbDeviceIter.next();  
        //VendorID 和 ProductID  十进制
        //Log.e("", "Name: " + ud.getDeviceName());                 
        if(239 ==ud.getDeviceClass() && 2 == ud.getDeviceSubclass()){               
            // Log.e("device","find camera"); //bhw
             vid = ud.getVendorId();
             pid = ud.getProductId();
             Log.e("", "VID = " + ud.getVendorId() +" PID = "+ ud.getProductId());               
             datas.add(vid + ":" + pid);                        
             }
}
/*这里要注意查询的条件是if(239 ==ud.getDeviceClass() && 2 == ud.getDeviceSubclass())
就是说获取设备类为239和子类为2的就是USB摄像头,其他的设备例如U盘啊触摸屏啊都是0
*/
需要注意的是  spinner.performClick();spinner.setAdapter(adapter);这两个语句的位置的写法,一定要在线程里面放置,即new Thread(mrunnable).start();内部不然无法在spinner内部显示出来。
好了贴出源码:


package com.example.spinnertest;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import com.example.spinnertest.ClickControlledSpinner;
import com.example.spinnertest.ClickControlledSpinner.OnClickMyListener;

import android.app.Activity;
import android.content.Context;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.test.PerformanceTestCase;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MainActivity extends Activity {

    private ClickControlledSpinner spinner;
    private Spinner spinnerTwo;
    private ArrayList datas;
    private String[] datas1;

    private UsbManager usbManager,usbManager1;
    private UsbDevice usbDevice,usbDevice1;
    private ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        datas = new ArrayList<String>();
        usbManager1 = (UsbManager) getSystemService(Context.USB_SERVICE);
        UsbDevice ud1= null;
        spinner = (ClickControlledSpinner) this.findViewById(R.id.spinner);
        spinnerTwo = (Spinner) this.findViewById(R.id.spinnerTwo);
        //datas = new String[] {"","","",""};
        datas1 = new String[] {"sdadas","dadas","dada","dada"};
        //int i,vid1,pid1;
        //datas.add("");
        /*      
        HashMap<String, UsbDevice> map1 = usbManager1.getDeviceList();
        Collection<UsbDevice> usbDevices1 = map1.values();
        Iterator<UsbDevice> usbDeviceIter1 = usbDevices.iterator();

        while (usbDeviceIter1.hasNext()){
            ud1 = usbDeviceIter.next(); 
            //VendorID 和 ProductID  十进制
             Log.e("", "Name: " + ud.getDeviceName());                  
             if(239 ==ud1.getDeviceClass() && 2 == ud1.getDeviceSubclass()){                
                 Log.d("device","find camera"); //bhw
                 vid1 = ud1.getVendorId();
                 pid1 = ud1.getProductId();
                 Log.d("", "VID = " + ud1.getVendorId() +" PID = "+ ud1.getProductId());                 
                 datas.add(vid1 + ":" + pid1);

             }
        }*/


        ArrayAdapter<String> adapterTwo = new ArrayAdapter<String>(this,R.layout.my_simple_spinner_self_item, datas);  
        //Spinner下拉菜单显示样式  
        adapterTwo.setDropDownViewResource(R.layout.my_simple_spinner_self_item);  
        spinnerTwo.setAdapter(adapterTwo);  


        //原生态样式,已android.R.layout.simple_spinner_dropdown_item为例,其他修改类似
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, datas);
        //ArrayAdapter<int> adapter = new ArrayAdapter<int>(this,android.R.layout.simple_spinner_dropdown_item, datas);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        Log.e("device","ZZZZZZZZZZZZZZZZZZZZZZ");

        spinner.setSelection(0);
        spinner.setOnClickMyListener(new OnClickMyListener() {          
            @Override
            public void onClickm() {
                // TODO Auto-generated method stub
                //datas.add("dasdasda");
                usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
                UsbDevice ud= null;
                int vid,pid;
                datas.clear();//清空列表,每次下拉更新都要清空,不然列表会越来越大
                //datas.add(12345);

                //datas.add("");
                HashMap<String, UsbDevice> map = usbManager.getDeviceList();
                Collection<UsbDevice> usbDevices = map.values();
                Iterator<UsbDevice> usbDeviceIter = usbDevices.iterator();

                while (usbDeviceIter.hasNext()){
                    ud = usbDeviceIter.next();  
                    //VendorID 和 ProductID  十进制
                     //Log.e("", "Name: " + ud.getDeviceName());                    
                     if(239 ==ud.getDeviceClass() && 2 == ud.getDeviceSubclass()){              
                        // Log.e("device","find camera"); //bhw
                         vid = ud.getVendorId();
                         pid = ud.getProductId();
                         Log.e("", "VID = " + ud.getVendorId() +" PID = "+ ud.getProductId());               
                         datas.add(vid + ":" + pid);                        
                     }
                }
                new Thread(mrunnable).start();
            }
        });


        spinnerTwo.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                Log.i("ddd", "----zz   arg2 = " + arg2);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });

        spinner.setOnItemSelectedListener(new Spinner1ClickListener()); // 
    }

    Handler mhandler = new Handler() {//caozuo
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            spinner.performClick();
            spinner.setAdapter(adapter);
            //spinner.setOnItemSelectedListener(new Spinner1ClickListener());
        }       
    };

    Runnable mrunnable = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            mhandler.sendEmptyMessageDelayed(0,100);
        }

    };


}

下面是应用的截图:
这里写图片描述
这里写图片描述
这里写图片描述

spinner实时更新 spinner的item增加,减少,实时更新listview上的数据 立即下载

相关推荐

白话详细解读(七)----- CBAM:Convolutional Block Attention Module

一、CBAM简介 论文链接:https://x.sci-hub.org.cn/scholar?hl=zh-TW&as_sdt=0%2C5&q=CBAM%3A+Convolutional+Block+Attention+Module&btnG=&oq=CB CBAM这篇论文是在2018年提出的,自提出之后,已经被引用上千次,可见其影响力。CBAM是一种专门为了卷积神经网络而设计的注意力模块,传统的卷积存在只关注局部信息,而往往忽略全局信息的弊端,以3*3卷积为例,滤波器有9个

奋斗の博客 1万+

Android开发:从数据库中获取数据动态设置下拉列表

实现 1、在res目录下创建文件menu/catagory.xml文件(可以创建别的名字) 注意:这里如果添加了<item>,那么可能会出现后期多了一个item <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> </menu> 2、初始化菜单项 /** * 初始

lena blog 1890

Nvidia Tesla A100 驱动安装方法

Nvidia Tesla A100 驱动安装方法 遇到的问题:以前安装tesla系列、geforce系列等gpu 驱动的时候,只需执行nvidiaxxxx.run驱动包或者安装nvidiaxxxx.rpm包即可,但遇到新的GPU Nvidia Tesla A100的时候,安装完驱动似乎不起作用,找了半天资料,原来需要以下步骤才可以使用;

qq_24343177的博客 2万+

Android进度条、自动提示框、下拉框动态数据加载

1.进度条实现 布局文件: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xm...

li1470846的博客 2136

银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例

文章目录1.软加解密示例2.知识点①ANSI X9.8 格式标准②主密钥,工作密钥加解密基本概念:加密种类:3.密码键盘操作4.工具 1.软加解密示例 ————————————————————————————————————————————------ 已知数据: 银行测试主密钥TMK: 1234567890ABCDEFABCDEF0987654321 通过签到接口得到: 工作密钥密文KeyVal...

老孟嘚吧嘚 6655

Simulink小白必看:用Simscape轻松搭建二阶倒立摆模型(附完整参数配置)

本文为Simulink初学者提供了使用Simscape Multibody模块库,从零开始搭建二阶倒立摆非线性物理模型的完整实战教程。文章详细讲解了如何通过物理组件(如刚体、关节)直观建模,替代复杂的数学推导,并涵盖参数配置、仿真调试及模型线性化方法,帮助读者快速掌握这一高效的物理建模路径。

grpc6streamer的博客 1048

增加Android下spinner控件的点击下拉列表自动更新事件并实例应用--USB摄像头在spinner内下拉更新(一)

转载请注明:http://blog.youkuaiyun.com/hubbybob1/article/details/57457364 最近在编写一个Android下自动读取USB摄像头的应用,主要是读取摄像头的VID与PID,思考以什么样的方式读取,因此做了一个小的demo,使用Android的spinner控件是最好的选择,但是spinner的一个最大的缺点就是在下拉列表的时候无法自动更新列表,网上很多使

hubbybob1专栏 2397

Remote ID的调制解调FPGA实现

Remote ID源于航空安全需求,例如在无人机密集区域实现设备跟踪和防碰撞。它类似于航空领域的ADS-B系统,但针对低空飞行器。Remote ID系统通常工作在特定频段(如2.4 GHz或5.8 GHz),通过无线链路广播数据包,包含设备ID、经纬度、高度和速度等信息。调制解调过程确保这些数据在噪声环境中可靠传输。例如,标准如ASTM F3411定义了Remote ID的协议框架,其中调制解调是关键物理层组件。

yulongfenghu的博客 1507

Android开发使用Spinner更新ListView

Android中通过Spinner更新ListView

Afison的博客 898

【招商银行笔试题汇总】[全网首发]2024-04-23-招商银行春秋招笔试题-三语言题解(CPP/Python/Java)

🏳️ 难难难!!!本次招商银行的笔试算是今年春招最难的场次之一了K小姐所在的公司有 NNN 个部门,编号从 111 到 NNN。由于公司网络系统比较老旧,对于同一个数据 ddd,不同部门记录的值可能不同。数据 ddd 在各部门被记录为 d1,d2,...,dNd_1, d_2, ..., d_Nd1​,d2​,...,dN​。公司提出可以通过会议来实现数据的一致性。每次会议会让相邻编号范围内的所有部门一起参加,如果有超过半数的部门能够对数据 ddd 的值达成共识,那么在此次会议后,参与会议的所有部门会将

春秋招笔试突围 3464

Transformer 在自动驾驶中的应用:深度对比特斯拉(Tesla)、小鹏(XNet)、华为(ADS 2.0)在 Transformer 架构应用上的异同

自动驾驶汽车是当前人工智能和机器学习领域的热点研究方向之一。其核心技术之一就是基于深度学习的感知和决策系统。在感知系统中,目标检测和跟踪、语义分割、场景理解等计算机视觉任务至关重要。而在决策系统中,规划和控制模块需要对当前状态进行建模并做出相应的决策。近年来,Transformer模型在自然语言处理领域取得了突破性进展,并逐步被应用到计算机视觉等其他领域。相比于传统的卷积神经网络和循环神经网络,Transformer模型具有建模长距离依赖关系的能力,可以更好地捕捉输入序列中的全局信息。

AI天才研究院 866

Android使用Spinner实现下拉选功能(获取远程数据并根据下拉刷新) (学习笔记 (二))

Android使用Spinner实现下拉选功能(获取远程数据并根据下拉刷新)(学习笔记 (二))实现效果实现第一步,添加DBOpenHelper.java第二步,修改Spinner_Bean.java第三步,修改MainActivity.java 实现效果 实现第一步,添加DBOpenHelper.java package com.example.studyproject; import ja...

Tobey_r1的博客 990

算法 | 基于灰狼优化算法的无人机三维路径规划方法研究(附matlab代码)

针对复杂环境下的无人机三维路径规划问题,本文提出一种基于灰狼优化算法(Grey Wolf Optimizer, GWO)的解决方案。通过模拟灰狼群体的社会等级与协作捕猎机制,结合动态参数调整策略,优化路径长度与避障性能。实验表明,相较于粒子群优化(PSO)和遗传算法(GA),GWO算法在收敛速度与路径成本上分别提升约25%和18%,且在三维城市地形中表现出更强的避障鲁棒性。本文提供完整的MATLAB代码实现,为无人机自主导航提供理论与技术支撑。

尘世冰封的专栏 288

Android自己动手实现下拉刷新控件(1)----典型控件分析

现在已经是2018年,geogle的SwipeRefreshLayout效果已经可以满足一部分需求,github上的开源项目更是有很多成熟的炫酷的下拉刷新控件,那么为什么还要自己动手实现一个下拉刷新控件? 整个系列文章的脉络是: Android自己动手实现下拉刷新控件(1)—-典型控件分析 Android自己动手实现下拉刷新控件(1)—-知识储备 Android自己动手实现下拉刷新控件(...

BigPig_LittleTail的博客 909

android 蓝牙通讯demo

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

#Spinner 异步刷新

#Spinner 异步刷新 使用下拉框spinner适配Adapter以后,需要在本页面进行动态刷新数据,但给ArrayList..add(String)以后在下拉框能够显示添加的数据,但是无法选中,这是由于异步刷新数据,并没有实时的添加到适配器中(个中详细,暂不明了),所以需要对适配器Adapter进行刷新,即:Adapter.add(String). private void ...

qq_30459869的博客 796

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

spinner动态刷新失败

解决办法 mySpAdapter.notifyDataSetChanged();//先刷新适配器 spFrequency.setSelection(2);//再建值

sunweihao2019的博客 646

列表控件ListView与下拉列表Spinner

设计一个以Spinner和ListView方式显示省市列表的应用程序;当用户在下拉列表中选择某一个省后,在列表控件中列出该省对应的城市名称供用户选择。 实验代码: MainActivity.java package com.example.provinceandcity;   import android.app.Activity; import android.content.r

chenchuwai的博客 3898

【Android Studio学习】11.menu选项菜单,spinner下拉框,以及ListView的合作

安卓作业实现以下效果:利用选项菜单或者spinner实现这样一个分类效果,感觉还挺实用的。记录一下制作过程。 listview的布置 首先在mainactivity的xml文件里添加一个listview控件, 如果使用spinner还可以添加一个spinner控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

m0_51692337的博客 2835

关于下拉列表的实现(spinner和PopupWindow+listview)

下拉菜单,个人感觉spinner使用起来不太好看,特别默认会显示第一行建议PopupWindow+listview来实现 1:用Spinner实现 spinner可以使用xml中数组最为资源或者使用代码控制 在values下新建arrays.xml c语言 java php

mengshirui_的博客 4789

【安卓学习之常见问题】初始化Spinner、CheckBox和SeekBar不触发事件

提示:这里是收集了和文件分享有关的文章。

任我飞的博客 1479

Spinner设置动态弹出

spinner.performClick(),则可以自动弹出

chxc_yy的博客 522

android spinner动态添加数据,如何在Android中动态更新Spinner中的数据?

您可以使用BaseAdapter的任何子类来执行此操作。假设您要从数据库加载数据,请使用SimpleCursorAdapter。String[] from = new String[]{"nameOfColumn"}; //nameOfColumn is the name of the column in cursor to display in the spinner.int[] to = ne...

weixin_33547979的博客 1910

java spinner_java – Spinner仅更新用户操作

我有IconText,里面有图像和文本视图,包括class和xml.然后,我使用扩展的BaseAdapter(IconTextAdapter)作为适配器,使用这些IconTexts填充MainActivity内部的Spinner.现在,IconText工作正常(显示它应该).但旋转器没有.>当我启动应用程序时,它会显示第一个IconText.>当我打开选择对话框时,一切都正常显示.&g...

weixin_35999303的博客 161

android spinner 清空,从Android中的Spinner中删除特定值

我必须解析从服务器到微调器的数据。现在我想从Spinner中删除一些值。从Android中的Spinner中删除特定值这里是我的代码。mytaxList包括所有值。现在我想检查一下,如果TaxType是复合删除微调从该类型TaxName和TaxValue。其实我不想在微调中显示cound type tax。即我想从ArrayList mytaxList中移除复合类型税。JSONObject tax...

weixin_30725113的博客 795

Android借助于Spinner可以动态添加删除项目

Android借助于Spinner可以动态添加删除项目(Android初学)介绍实施步骤详解第一步:对activity_main.xml文件进行修改,即进行页面布局第二部:将代码的样式进行修改(先做出样式再完成功能)第三步:设置静态数据(因为第一次打开有点数据在spinner里总是好看的)第四步(最重要的一步)结语 介绍 在学习Android的spinner控件后,需要完成一个EditText文本...

qq_41824524的博客 2330
上一篇: 增加Android下spinner控件的点击下拉列表自动更新事件并实例应用--USB摄像头在spinner内下拉更新(一)
下一篇: Spice下命令spicy的USB重定向过程分析
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值