gpt4 book ai didi

android - 未知的 ListView 行为

转载 作者:行者123 更新时间:2023-11-29 02:16:54 26 4
gpt4 key购买 nike

我目前正在 Android 中制作 SMS 应用程序,以下是 Inbox Listactivity 的代码 fragment ,我已从 contentresolver 请求光标并使用自定义适配器将自定义 View 添加到列表中。

现在,在自定义 View 中我有 2 个 TextView(tvFullBodytvBody)...tvFullBody 包含完整的 SMS 文本,而 tvBody 包含简短预览(35 个字符)tvFullBody 可见性默认设置为“消失”。

我的想法是,当用户单击列表项时,tvBody 应该消失 (GONE) 而 tvFullBody 应该变得可见 (VISIBLE)。再次点击时,它应该恢复到原来的状态。

//isExpanded is a BitSet of the size = no of list items...keeps track of which items are expanded and which are not

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

if(isExpanded.get(position))
{
v.findViewById(R.id.tvFullBody).setVisibility(View.GONE);
v.findViewById(R.id.tvBody).setVisibility(View.VISIBLE);
}else
{
v.findViewById(R.id.tvFullBody).setVisibility(View.VISIBLE);
v.findViewById(R.id.tvBody).setVisibility(View.GONE);
}
isExpanded.flip(position);
super.onListItemClick(l, v, position, id);
}

代码按预期工作:) 除了不希望的副作用....每 10 个(左右)列表项也会被“切换”。例如。如果我展开第一个,那么第 11 个、第 21 个列表项也会展开...虽然它们仍然不在屏幕上,但在滚动时您会看到不需要的“展开”。

根据我的新手分析,我猜 Listview 会跟踪 10 个当前可见的列表项,在滚动时,它会“重用”那些相同的变量,这会导致这个问题...(我没有检查android源代码还没有。)对于我应该如何解决这个问题的任何建议,我将不胜感激! :)我也对其他方法持开放态度......提前致谢! :)

最佳答案

您对问题的诊断几乎是正确的。发生的事情是 Android 正在重用它创建的 View 来显示列表以节省内存。 Android 不会为列表中的每个项目创建一个新 View ,而是创建足以填满屏幕的 View ,更新它们以显示当前可见项目的相关数据。

因此,当您在用户点击某个项目时显示 tvFullBody 时,当稍后重新使用该 View 时,tvFullBody 仍然可见。

您可能必须编写自己的 ListAdapter 以确保 View 以您想要的方式显示。它应该像扩展您当前使用的 ListAdapter 一样简单,并覆盖 the getView() method。确保隐藏 tvFullBody

关于android - 未知的 ListView 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3059807/

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