gpt4 book ai didi

java - 在 ListView 中添加单个开关

转载 作者:行者123 更新时间:2023-12-02 07:24:23 27 4
gpt4 key购买 nike

我需要向我的 ListView 添加一个开关(Android 4.0+),只是一个带有 ImageView 按钮的开关,我看过很多教程,教如何在列表 Activity 中添加多个 View ,但我需要的只是一个列表中的单个选项有此开关。我知道如果我可以放置一个按钮或 TextView ,我可以在那里放置一个开关,但我不明白如何在其中放置一个按钮或任何 View ,而不在所有选项上重复整个相同的场景,对于我来说,我是ArrayAdapters 和 ListViews 的新手,但我需要学习这两个,以便以后可以使用它们!我需要的是这样的,例如:

______________________
Image | Switch
______________________
Normal option
______________________
Button | Whatever view
_______________________
Normal option
_______________________
Checkable Option
_______________________

等等...所以如果你清楚的话,我想完全控制其中的每个选项,这就是我需要和想要的。感谢您的帮助:)

最佳答案

如果您要通过 ListView 来完成此操作,那么您可以通过明确适配器的 getView 方法中的每个位置来完成。这是一个例子:

public View getView(int position, View convertView, ViewGroup parent) {
switch (position) {
case 0:
// do image switch option
// convertView = layout 0
break;
case 3:
// do button whatever option
// convertView = layout 3
break;
case 5:
// do button whatever option
// convertView = layout 5
break;
default:
// do normal option
// convertView = layout 1
break;
}
return convertView;
}
<小时/>

getView 是许多 Android 适配器中返回 View 的方法。当连接到 listView 时,它将被识别为为其每一行返回 View 的方法。您看到的 ListView 中的每一行都是此方法的一个执行实例的结果。您不调用它:每当需要显示 ListView 的行时,或者每当行位置移出屏幕并返回时,或者每当刷新 ListView 时,通常每当 ListView 行必须“制作”时,它都会自动调用”。您可以覆盖它,以便您可以自定义您想要的特定外观。

convertView 也是一个 View 。它是在 ListView 适配器中运行的并发机制的产物,称为 View 回收。假设您有一个 ListView ,需要为游戏的购物菜单显示 1000 行。传统的方法是,您只需在 getView 中创建一个 inflate 命令以获得充满活力的 xml,并编辑组件以显示项目差异。 所以,这相当于膨胀了 1000 倍(请注意,膨胀是一个昂贵的步骤),再加上所有这些都必须在内存中,并且只会堵塞您的垃圾收集器。另外,如果您需要刷新某些内容以显示更改怎么办?你出去!现在已经有了四核手机,但还有更好的方法。

正确处理的 ListView 实际上不会一次产生 1000 个 View ,而只会一次在屏幕上显示 7 或 8 个 View 。当 ListView 行 View 滚动到手机屏幕边界之外时,它还不会被丢弃。此并发机制运行,此 View 被保存并保存在 convertView 标题下,并作为参数传递给下一个 getView 调用。不(重新)使用它是一种可怕的浪费,因为本质上你有一个看起来像下一个 getView 调用中的下一行的 View ,也许只改变了 textview 中的文本或类似的东西,但你会无论如何,都会再发生一次昂贵的通货膨胀。然后未使用的convertView知道它的第二次机会已被忽略,进入GC,一切照常。

上面的代码没有使用convertView,因为坦率地说,问题中没有询问它,但它的使用非常简单。

public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// inflation step
// convertView = inflation
}

// rest of code involving components of inflated view
return convertView;
}

首先,您检查那里是否没有任何东西,您可以想象一下,当 ListView 首次启动时,没有任何东西有机会被扔掉。只有这样你的通货膨胀才会发生。下一次,getView 将用用过的 View 塞满它的嘴,并将其插入(如果它被返回)。这是对 ListView 性能最有利的操作,您可以立即执行。

但是你应该知道这一点,这个网站上大约有一半标记为 android 的问题都与此有关,不能保证 ConvertView 会落在你想要的位置,如下所示,如果如果向下滚动,您将向上滚动并在正上方。只要确保你明确说明什么在什么位置就可以了。有关此和其他 ListView 技术的更多信息,请观看:http://www.youtube.com/watch?v=wDBM6wVEO70

关于java - 在 ListView 中添加单个开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com