Android:动态更改Listview中的图像

2024-06-05

我有一个由以下 xml 定义的列表视图。我需要切换图像当用户单击任何行时,在运行时会出现在列表中。我怎样才能实现这个目标?非常感谢任何帮助。谢谢

//list_item.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play" 
android:id="@+id/img"
/> 
<TextView 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:id="@+id/txt"
/>
</LinearLayout>

您可以找到该项目的img通过调用查看findViewById http://developer.android.com/reference/android/view/View.html#findViewById%28int%29关于第二个参数(即View单击的项目的)内onItemClick http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html#onItemClick%28android.widget.AdapterView%3C?%3E,%20android.view.View,%20int,%20long%29处理程序:

public void onItemClick(AdapterView parentView, View clickedItemView, int pos, long id)
{
    ImageView imageView = (ImageView) clickedItemView.findViewById(R.id.img);
    // ...
}

EDIT:请注意 Android 重用列表项View对象(也称为视图回收),因此需要存储每个项目的切换状态以供以后使用。每当列表项视图绑定到要显示的列表项时,都需要访问每个项目的切换状态。

例如,以下是单击时切换每个项目的图像的活动的工作示例:

import java.util.Arrays;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;

public class SO4539968TestCaseActivity extends Activity {
    private static final List<String> ITEM_TEXTS = Arrays.asList(new String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"});

    private boolean[] itemToggled;

    private class MyArrayAdapter<T> extends ArrayAdapter<T>
    {
        public MyArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) {
            super(context, resource, textViewResourceId, objects);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View itemView = super.getView(position, convertView, parent);
            ImageView imageView = (ImageView) itemView.findViewById(R.id.img);
            imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
            return itemView;
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        itemToggled = new boolean[ITEM_TEXTS.size()];
        Arrays.fill(itemToggled, false);

        ListView listView = (ListView) findViewById(R.id.list_view0);
        listView.setAdapter(new MyArrayAdapter<String>(this, R.layout.list_item, R.id.txt, ITEM_TEXTS));
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> listView, View itemView, int position, long id) {
                itemToggled[position] = ! itemToggled[position];

                ImageView imageView = (ImageView) itemView.findViewById(R.id.img);
                imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
            }
        });
    }
}

要学习的重要部分是onItemClick回调和覆盖getView in MyArrayAdapter.

The getView http://developer.android.com/reference/android/widget/Adapter.html#getView%28int,%20android.view.View,%20android.view.ViewGroup%29的方法Adapter类负责膨胀项目布局。在这个例子中,我称getView超类的方法最初准备项目视图,但随后我确保正确设置项目的资源 IDimg view:

imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);

也可以看看:开发 Android 应用程序 – 陷阱和怪癖 https://jonhoo.wordpress.com/2010/07/17/developing-applications-for-android-gotchas-and-quirks/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:动态更改Listview中的图像 的相关文章

  • 获取按下按钮的压力

    android 中有没有一种简单的方法来获取用户在 onClick 事件期间施加的压力 如果您向按钮添加 MotionEvent 侦听器 您可以向 MotionEvent 请求压力 相关文档 http developer android c
  • Android - 如何以编程方式定义 ShapeDrawables?

    我想要实现的是使用内部有几个层的 Drawable 但在运行时控制一些值 例如渐变的 startColor 这是 my layered shape xml 中的内容
  • 对 AAssetManager_fromJava 的未定义引用

    我正在尝试使用 AAssetManager 从 Android apk 访问资源 然而 我不断得到 未定义对 AAssetManager fromJava 的引用 即使我已包含 asset manager h 和 asset manager
  • Intent.putExtra列表[重复]

    这个问题在这里已经有答案了 可能的重复 如何将列表放入意图中 https stackoverflow com questions 6541088 how to put a list in intent 我想通过一个List从一项活动转移到另
  • 是否针对各种屏幕尺寸建议修改 dp 大小而不是像素?

    比如说 对于屏幕A 240X320 ldpi 和屏幕B 720X1280 xhdpi 上的ImageButton 是否建议在各个屏幕的每个唯一布局资源文件中手动更改其dp 布局宽度和高度 大小 或者 为图像的每个 dpi 大小创建缩放的九块
  • 毕加索不在磁盘上缓存图像

    我必须使用自定义 OkHttpClient 以便我可以向图像请求添加标头 问题是毕加索不会因此而在磁盘上缓存任何图像 我用过setIndicatorsEnabled true 检查缓存 我只看到红色指示器 当我使用默认的 OkHttpDow
  • 用于编辑文本的电子邮件键盘

    以下代码似乎不起作用 我想要电子邮件键盘 and com显示编辑文本 emailEditText setInputType InputType TYPE TEXT VARIATION EMAIL ADDRESS 将其添加到您的布局中 and
  • 如何在 Kotlin 中获取可绘制对象?

    I am working on a small project in Android Studio I have drawable added to res drawable folder 但是我无法从代码中获取它 我尝试过不同的方法 Co
  • 如何在 Android 上将 ISO 8601 字符串解析为 Java 日期 [重复]

    这个问题在这里已经有答案了 我正在 Android 上创建一个与服务器通信的应用程序 该服务器给我返回了一个ISO 8601 http en wikipedia org wiki ISO 8601日期字符串 如下所示 2014 11 21
  • AsyncTask加载图像RecyclerView

    我正在尝试创建一个与该应用程序类似的应用程序 一个在回收视图中包含一些图像和描述 卡片视图 的应用程序 https lh5 ggpht com At pHbZqdzlgmAqY0jbiztDYIAts1wOYWGTOHibmFHuq8CFA
  • Android 开发工具无法通过 adb 识别 Asus Nexus 7

    问题 正确安装和连接后 adb 无法识别 Asus Nexus 7 设置 华硕 Nexus 7 平板电脑 Windows 7 64 位操作系统 采取的步骤 安装64位Java JDK http www oracle com technetw
  • 如何将 VectorDrawable 与 Android 工具栏一起使用?

    在工具栏中使用新的 VectorDrawable 的正确方法是什么 我尝试使用app srcCompat元素如下图所示 但没有任何显示 menu menu
  • Android Edittext Onclick Datepickerdialog 棒棒糖中出现错误

    我正在使用日期选择器对话框 它在 kitkat 上运行正常 但是当我在棒棒糖上运行应用程序时 当我单击编辑文本时 它会打开一个日期选择器对话框 但当我选择日期时 它会不幸地给出停止错误 以下是 edittext 上日期选择器的代码 priv
  • 发布 apk 中的“来源不明”

    我的调试 APK 中的所有内容都运行良好 但是 当我导出 APK 并安装它时 一切正常 直到我调用引用的库 E AndroidRuntime 32571 at com znood znoodapp ShowResultsActivity a
  • 如何将相机居中以使标记位于屏幕底部? (谷歌地图API V2 Android)

    单击标记时 相机的默认行为是将其置于屏幕中央 但由于我通常在信息窗口中有很长的文本描述 因此实际更改相机位置以使标记位于屏幕的底部会更方便 屏幕 使信息窗口位于屏幕中央 我认为我应该能够通过重写 onMarkerClick 函数来做到这一点
  • Android 切换按钮

    通过遵循这个article http ww1 mokasocial com 我能够创建一个由图像组成的切换按钮 我的开关没有任何文字 只有开 关图像 当我的切换按钮创建时 它会被拉伸并失去其比例 如何使其保留其原始大小 这些是我使用的图像
  • 更新 android chrome 版本 65 后,应用程序无法运行,Sencha touch 和 cordova android

    更新 chrome 版本 65 后 应用程序在点击某些点击事件时再次显示启动屏幕 它是 Sencha touch 和 Cordova android 的混合应用程序 编辑 这是一个已知的 chrome 65 错误 https bugs ch
  • .so 文件的 objdump?需要帮助来理解消息

    我正在开发一个与流相关的本机应用程序 我在我的 c 模块中遇到了一些问题 我收到的是来自 Logcat 的一些消息 这是 Logcat 消息 INFO DEBUG 28 Build fingerprint generic sdk gener
  • JSON 解析为 Java - Android 应用程序

    我需要在 Java Android 应用程序中解析 json 字符串的帮助 JSON 文件的文本 data columns location id name description latitude longitude error type
  • 当用户从android后台删除应用程序时如何检测事件?

    当用户从后台删除我的应用程序时 我需要重置通知 所以我需要一个从后台删除应用程序的事件 请帮帮我 建议表示赞赏 谢谢 亲切的问候 官方安卓文档 Activity onDestroy 您的活动被销毁之前收到的最后一个电话 发生这种情况的原因可

随机推荐

  • C 中文字数值的类型选择

    我想知道这一点 当我尝试将整数值分配给int变量 16 位编译器 整数 2 个字节 让我们说 int a a 40000 无法用将被截断的类型范围来表示 但我看到的是结果值a是 25000 或某个接近的数字 的位模式 这意味着编译器为十进制
  • RealityKit – 如何为自然光创建阴影捕捉器?

    我想创建一架飞机 func getShadowPlane width Float height Float gt ModelEntity let sphereResource MeshResource generatePlane width
  • 如何从网页中提取文本内容? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在用java开发一个应用程序 它
  • React JS - 如何将 json 数据绑定到下拉列表

    我有一个 React JS 文件 我正在尝试将数据绑定到下拉列表 数据存储在以下测试 API json 文件中 https api myjson com bins okuxu https api myjson com bins okuxu
  • 当 Electron 在后台时避免应用程序节流

    考虑以下示例 setInterval function console log new Date 如果我运行它electron example js在 OS X 下 它会在我的停靠栏中打开一个图标 并开始在控制台上打印时间 然而 如果应用程
  • Google Sheet - 使用 arrayformula 将两列转换为一列(超过 50,000 个字符)

    我正在使用 Google Sheets 并寻找一个数组公式 该数组公式能够将列表分为两列并将其交替排列在一列中 该表包含约 5 000 行 每行超过 35 个字符 我试过这个 transpose split join query trans
  • 如何使用ctrl+c停止tornado web服务器?

    我是龙卷风网络服务器的新手 当我使用 python main tornado py 启动龙卷风网络服务器时 它正在工作 请看下面的代码 import tornado ioloop import tornado web class MainH
  • 缓存施瓦茨变换

    我正在学习 中级 Perl 它非常酷 我刚刚读完 施瓦茨变换 部分 在理解它之后 我开始想知道为什么变换不使用缓存 在具有多个重复值的列表中 转换会重新计算每个值的值 因此我想为什么不使用哈希来缓存结果 这是一些代码 a place to
  • Android-ListView-performItemClick

    当我尝试使用时遇到一些困难执行项目单击ListView 的功能 我想要做的就是以编程方式在列表的第一项中执行单击 我怎样才能做到这一点 我在文档中查找了该函数 但我并不真正理解它的参数 我尝试过类似的事情 myListView perfor
  • 为什么需要更改 IE 设置才能在 Windows 10 上启用 HTTP/2?

    我最近在我正在开发的网站上启用了 HTTP 2 为了做到这一点 我必须 使用 Windows 10 使用支持 HTTP 2 的浏览器 在我的例子中是 Chrome 配置我的 Web 服务器 iis express 以使用 https 为网站
  • Dictionary(Of String, String) 和 IDictionary(Of String, String) 有什么区别

    我可以用 IDictionary 做更多或更少的事情吗 这两个集合有何不同 IDictionary 只是一个接口 一个描述实现类必须执行的操作的契约 Dictionary 是一个实现该接口的具体类 因此必须提供 IDictionary 接口
  • 如何指定测试窗口?

    我需要测试中的屏幕看起来与物理设备 或模拟器 上的屏幕相同 我该怎么做 就我而言 设备 ID 为 Iphone SE 我编写了一个将屏幕截图保存到磁盘的测试 testWidgets test WidgetTester tester asyn
  • ES5 导出的函数无法识别

    我得到了这个 math js const sum a b gt a b const mul a b gt a b export default sum mul 然后在 math test js 中 const sum mul require
  • 将箭头附加到 UIBezierPath

    我需要你的帮助 我正在尝试使用具有可变宽度的 UIBezierPaths 创建一个图形 并由带有两个控制点的贝塞尔曲线组成 现在我想在这些路径的末尾 右侧 添加箭头 有没有办法做到这一点 即通过附加一个包含三角形的较小线宽的子路径 这是我想
  • 正则表达式。如何从该字符串中获取多个匹配项?

    我正在使用 JavaScript 正则表达式 假设我有以下字符串 XXX 1 XXX XXX 2 XXX XXX 3 XXX YYY 1 YYY YYY 2 YYY YYY 3 YYY 我想运行正则表达式并获得以下模式的结果 Match1
  • 替代 __del__ 来获得最终结果并终止类中的进程?

    这个虚拟类类似于我当前的项目 class EndProcess object def init self self Q multiprocessing Queue self p1 multiprocessing Process target
  • 给定以下代码(在 GCC 4.3 中),为什么调用转换为引用两次?

    给定以下代码 在 GCC 4 3 中 为什么在这两种情况下都会调用到引用的转换 class A class B public operator A operator A int main B b A b A b http ideone co
  • 解决Java中的“未经检查的警告”,避免@suppressWarnings

    这是一个尝试改进我的代码问题 关于泛型和未经检查的警告 我确实知道 suppresswarnings注解 问题是我应该编写什么代码来抑制它 请使用以下代码 public class NumericBox
  • 如何在 Ocaml 中表示一个简单的有限状态机?

    我用 C 和 Java 编写过一些状态机 但从未用过像 Ocaml 这样的函数式语言 问题是我不知道我是否可以从对象语言版本中调整代码 因为在 Ocaml 中记录和变体比类更强大 所以 我需要一个事件驱动的有限状态机 像 UML 中的分层结
  • Android:动态更改Listview中的图像

    我有一个由以下 xml 定义的列表视图 我需要切换图像当用户单击任何行时 在运行时会出现在列表中 我怎样才能实现这个目标 非常感谢任何帮助 谢谢 list item xml