首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

动态创建的ImageView id始终为-1

是因为在Android中,动态创建的View默认不会被赋予一个唯一的id。id的作用是在布局文件中通过findViewById方法找到对应的View,因此如果动态创建的View没有设置id,就无法在代码中直接通过id来操作该View。

为了解决这个问题,我们可以手动为动态创建的ImageView设置一个唯一的id。Android中提供了一个工具类ViewCompat用于兼容不同版本的系统,我们可以使用其中的generateViewId方法来生成一个唯一的id。

下面是一个示例代码,演示如何动态创建ImageView并为其设置唯一id:

代码语言:txt
复制
import androidx.core.view.ViewCompat;
import android.widget.ImageView;

// 创建一个ImageView实例
ImageView imageView = new ImageView(context);
// 为ImageView设置唯一id
int viewId = ViewCompat.generateViewId();
imageView.setId(viewId);

// 可以在代码中通过viewId来操作该ImageView
imageView.setImageResource(R.drawable.image);

// 添加到布局中
parentView.addView(imageView);

在上述代码中,我们首先通过ImageView的构造函数创建了一个ImageView实例,然后使用ViewCompat.generateViewId()方法为该ImageView生成了一个唯一id,并通过setId方法设置给ImageView。最后,可以根据viewId来对该ImageView进行进一步的操作,比如设置图片资源等。

关于动态创建ImageView的应用场景,可以在需要根据动态数据展示图片的情况下使用。比如在聊天应用中,根据接收到的消息内容动态创建ImageView来展示图片消息。

针对该问题,腾讯云并没有特定的产品或产品介绍链接地址,因为这是Android开发中的一个基础问题,与云计算服务关系不大。但腾讯云提供了丰富的云计算服务和解决方案,可供开发者在构建和部署应用时使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查

今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都是...1,而不是最新的自增Id。...int表示的是插入操作受影响的行数,而不是指的自增长id,那么返回的自增id到底去哪里了呢?...通过下面的Debugg我们知道自增id返回到testGenKey的原对象中去了。 举例示范配置 数据库示例表  generator的配置文件 <?...null : sex.trim(); } } 测试及Debugg 编写测试方法测试插入 插入成功后观察对应的变量对应的值 总结:调用Insert后插入操作之后,所得到自增长Id被赋值到原对象当中

1.7K10

使用flexible后 不同设备的data-dpr还始终为1解决方法

flexible是阿里团队开源的一个js库,使用flexible.js可以轻松搞定各种不同的移动端设备兼容自适应问题。...但是最近有朋友使用flexible.js插件,但是不管切换什么设备,data-dpr的值始终为1。 ?...=1, minimum-scale=1, user-scalable=no"> 其实flexible默认会查找name="viewport"或者name="flexible"的meta标签,当默认自己设定了...viewport,initial-scale="1",等等之后,相当于默认设置了dpr=1,或者name="flexible"下设置默认的 initial-dpr=1等默认值,这样flexible.js...是data-dpr=1的时候的值,iphone6,iphone5默认dpr为2,6plus为3 下面是flexible源码部分截图,这里注意只要meta有name=“viewport” 的都会被认为设置了默认值

2.6K00
  • dotnet C# 使用 Vortice 创建 Direct2D1 的 ID2D1SolidColorBrush 纯色画刷

    在进行 D2D 绘制文本或者是形状的时候,期望填充某个颜色,就需要用到 ID2D1SolidColorBrush 纯色画刷,在绘制的时候通过纯色画刷进行填充颜色。...本文将告诉大家如何使用 Vortice 库创建 ID2D1SolidColorBrush 纯色画刷 本文属于使用 Vortice 调用 DirectX 系列博客,也属于 DirectX 系列博客,本文属于入门级博客...如何进行离屏渲染请看 dotnet C# 使用 Vortice 支持 Direct2D1 离屏渲染 在获取到 ID2D1RenderTarget 之后,可以通过 ID2D1RenderTarget 的...() => (byte) Random.Shared.Next(255); 接着调用 CreateSolidColorBrush 方法创建 ID2D1SolidColorBrush 纯色画刷...如果用到 WinRT 可以设置为支持 win10 和以上。

    46520

    ❤️创意网页:创建更炫酷的动态网页——彩色数字(1到9)粒子动画

    在这篇技术博客中,我们将学习如何创建一个令人惊叹的动态网页效果。我们将使用HTML5的Canvas元素和JavaScript来实现一个彩色数字粒子动画。...动态图展示 静态图展示 图片1 图片2 HTML 结构 首先,我们需要创建一个包含Canvas元素的HTML结构。...Canvas是一个用于绘制图形的HTML元素,它允许我们通过JavaScript动态绘制内容。 的宽度和高度为浏览器窗口的宽度和高度,以使画布充满整个窗口。 创建一个Particle类来表示每个粒子。每个粒子具有随机的大小、颜色和竖直速度,以及一个表示1到9之间随机整数的数字。...(超简单什么都不用下载) 1.打开记事本 2.将上面的源代码复制粘贴到记事本里面将文件另存为HTML文件点击保存即可 3.打开html文件(大功告成(●'◡'●)) 总结 通过以上步骤,我们成功创建了一个令人惊叹的动态网页效果

    32510

    Android项目实战(四十七):轮播图效果Viewpager

    简易、常用的轮播图效果ViewPager ,老技术了,记一笔留着以后ctrl C + ctrl V  需求如下: 不定张个数的ImagView轮播,右下角显示轮播点图标,每隔固定时间切换下一张,最后一张图片自动切换后的为第一张图片...思路: 初始化Viewpager和轮播点之后  , 开启一个子线程,每隔3秒判断一次 当前位置是不是轮播图数据个数的最后一个位置,是的话切换到第一张图片,不是的话切换到下一张图片 一、先看布局文件,根容器为相对布局...); viewPagerData.add(imageView3); }  2、initDots()方法 /** * 动态创建轮播图位置点显示 */...private void initDots() { // 动态添加轮播图位置点 , 默认第0个位置 为当前轮播图的颜色 for (int i = 0; i < viewPagerData.size...{ if (currentPosition==viewPagerData.size()-1){ // 如果当前位置是轮播图的最后一个位置,则调到轮播图数据源的第一张图片

    1.5K100

    Android Fragment应用实战,使用碎片向ActivityGroup说再见

    第一个部分就是FrameLayout,这里只是给FrameLayout的id设置成content,并没有在里面添加任何具体的内容,因为具体的内容是要在后面动态进行添加的。...然后要去创建对应这个布局的Fragment。...tab时,选中第2个tab setTabSelection(1); break; case R.id.news_layout: // 当点击了动态tab时,选中第3个tab...* * @param index * 每个tab页对应的下标。0表示消息,1表示联系人,2表示动态,3表示设置。...onClick()方法中的逻辑判断非常简单,当点击了消息标签时就会选中第1个tab项,点击联系人标签时就会选中第2个tab项,点击动态标签时就会选中第3个tab项,点击设置标签时就会选中第4个tab项。

    1K100

    Android Fragment应用实战

    第一个部分就是FrameLayout,这里只是给FrameLayout的id设置成content,并没有在里面添加任何具体的内容,因为具体的内容是要在后面动态进行添加的。...然后要去创建对应这个布局的Fragment。...// 当点击了联系人tab时,选中第2个tab             setTabSelection(1);   break;   case R.id.news_layout:   // 当点击了动态...*       * @param index      *            每个tab页对应的下标。0表示消息,1表示联系人,2表示动态,3表示设置。      ...onClick()方法中的逻辑判断非常简单,当点击了消息标签时就会选中第1个tab项,点击联系人标签时就会选中第2个tab项,点击动态标签时就会选中第3个tab项,点击设置标签时就会选中第4个tab项。

    1.2K100

    关于activitygroup过时,用frament替换操作

    ActivityGroup原本主要是用于为每一个TabHost的子项管理一个单独的Activity,但目前已经被废弃了。为什么呢?当然就是因为Fragment的出现了!...第一个部分就是FrameLayout,这里只是给FrameLayout的id设置成content,并没有在里面添加任何具体的内容,因为具体的内容是要在后面动态进行添加的。...然后要去创建对应这个布局的Fragment。...*       * @param index      *            每个tab页对应的下标。0表示消息,1表示联系人,2表示动态,3表示设置。      ...onClick()方法中的逻辑判断非常简单,当点击了消息标签时就会选中第1个tab项,点击联系人标签时就会选中第2个tab项,点击动态标签时就会选中第3个tab项,点击设置标签时就会选中第4个tab项。

    3.2K70

    【Android 应用开发】AndroidUI设计 之 图片浏览器

    : 方法中的常量值为 ImageView.ScaleType.MATRIX, 使用矩阵来进行绘图; -- fitXY : 方法中的常量值为 ImageView.ScaleType.FIT_XY, 在x...ImageView中, 缩放完成之后该图片位于右下角; -- center : 方法中的常量值为 ImageView.ScaleType.CENTER, 将图片放在ImageView的中央, 不进行缩放...(uri), 为ImageView设置图片路径, 显示该路径的图片; 二....计算每次自增自减的单位值 : 当按下缩放按钮的时候, 就对ImageView的宽高值进行自增自减单位值操作; 为ImageView设置宽高 : 即设置LayoutParams, 注意是LinearLayout.LayoutParams...旋转图片操作 设置Matrix对象 : 该对象用来存放图像的旋转角度; 设置旋转角度 : matrix.setRotate(), 即可设置旋转角度; 创建Bitmap : 创建一个位图, 注意将设置了旋转角度的

    93820

    【译】与Adapter一起使用(ListView, GridView, ...)

    你会发现Picasso的调用方式与前面讲到的“常规”加载方式一样。无论你处于什么项目中,Picasso的调用方式始终不变。...Picasso有一个非常出色的特性,那就是它能够自动取消加载请求,清空ImageView上的图像,然后为适当的ImageView加载正确的图像。...再强调一遍,这里并没有什么是你必须要做的。在创建缓存大小方面,Picasso对你隐藏了所有的复杂细节。当然,从Picasso的实现理念来看,你可以替换缓存组件。...> <GridView android:id="@+id/usage_example_gridview" xmlns:android="http://schemas.android.com...如果一个或多个ImageView作为Adapter的一小部分存在,这种方法仍然适用,只不过getView()中的代码看起来会有些不同,但是Picasso的加载方式是始终不变的。

    1.2K20

    【C++】动态内存管理 ③ ( C++ 对象的动态创建和释放 | new 运算符 为类对象 分配内存 | delete 运算符 释放对象内存 )

    一、C++ 对象的动态创建和释放 使用 C 语言中的 malloc 函数 可以为 类对象 分配内存 ; 使用 free 函数可以释放上述分配的内存 ; 使用 C++ 语言中的 new 运算符 也可以为...m_height; // 身高 }; 之后 , 分别使用 C 语言的 动态内存管理 和 C++ 语言的 动态内存管理 , 分别创建和释放 Student 类实例对象 ; 1、C 语言 对象的动态创建和释放...、C++ 语言 对象的动态创建和释放 的方式 在 C++ 语言中 , 使用 new 和 delete 进行 对象的动态创建和释放 ; 使用 new Student(10, 150) 代码 , 可以在堆内存中申请...二、代码示例 - 对象的动态创建和释放 ---- 下面的代码中 , 分别使用了 C 语言的方式 和 C++ 语言的方式 , 对类对象进行动态内存分配 ; 代码示例 : #include "iostream...m_height; // 身高 }; int main() { // 为类对象内存分配 // C 语言中 为类对象 动态申请内存 Student* p = (Student*)malloc(

    36820

    Android经典实战之Kotlin中实现圆角图片和圆形图片

    ImageView 在 XML 布局文件中使用自定义的 RoundedImageView: <com.example.yourpackage.RoundedImageView android:id...(30f) // 设置圆角半径为30像素 完整实现 将这个方案分成两个主要部分: 1、 创建一个自定义的 RoundedImageView 类,并在 onDraw 方法中重写绘制逻辑。...2、 使用自定义的 RoundedImageView 并动态设置圆角。 通过这种方式,可以实现一个自定义的 AppCompatImageView,能够根据需要动态调整圆角半径。...完整实现 将这两个部分结合起来: 1、 在 build.gradle 中添加 Material 依赖。 2、 在布局文件中使用 ShapeableImageView 并设置初始的圆角样式。...3、 在代码中动态调整圆角半径。 这样,你可以获得一个易于管理且高度可控的圆角 ImageView,同时也利用了 Material Design 的强大功能。

    33210

    Android 自定义 ViewPager 打造千变万化的图片切换效果

    -1)获得滑动时,左右的两个View;乍一看,还真觉得不错~~~在代码写出来,再乍效果也出不来~~错误原因:我们忽略一个特别大的东西,ViewPager的机制,滑动时动态加载和删除View,ViewPager...(2),然后经过一系列的变化~我想这会总该对了吧,于是我遇到第一问题,第一页的时候,不管左右position都为0,尼玛,这哪个为左View,哪个为右View~~ 说了这么多错误,大家可以绕过这些弯路,...,然后滑动的时候,通过get(position)取出,比如上述效果,始终是右边的View变化,要么从小到大,要么从大到小 那么滑倒下一页:左边的View:map.get(position...那么滑倒上一页:左边的View : map.get(position) , 右边的View : map.get(position+1) , 一样的,因为滑到上一页,position为当前页-1 好了,至此...="@+id/id_viewPager" /> 4、JazzyViewPager的使用 其实上面的实现就是github上JazzyViewPager的源码,用法不用说了

    53110

    Android瀑布流照片墙实现,体验不规则排列的美感

    听我这么说完后,你可能会觉得瀑布流的布局非常简单嘛,只需要使用三个LinearLayout平分整个屏幕宽度,然后动态地addView()进去就好了。确实如此,如果只是为了实现功能的话,就是这么简单。...1/8。...这个方法的核心思想就是检查目前照片墙上的所有图片,判断出哪些是可见的,哪些是不可见。然后将那些不可见的图片都替换成一张空图,这样就可以保证程序始终不会占用过高的内存。...中就可以动态地向这三个LinearLayout里添加图片了。...瀑布流模式的照片墙果真非常美观吧,而且由于我们有非常完善的资源释放机制,不管你在照片墙上添加了多少图片,程序占用内存始终都会保持在一个合理的范围内。

    2.9K50

    Android实战技巧:ViewStub的应用

    大家好,又见面了,我是你们的朋友全栈君。 在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。...那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。...但是它的缺点就是,耗费资源。虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。...首先来说说ViewStub的一些特点: 1. ViewStub只能Inflate一次,之后ViewStub对象会被置为空。...先来看看布局,一个是主布局,里面只定义二个ViewStub,一个用来控制TextView一个用来控制ImageView,另外就是一个是为显示文字的做的TextView布局,一个是为ImageView而做的布局

    24820
    领券