我从listview/getChildAt方法得到了一些奇怪的行为.
我有一个HashSet,iconsToUpdate,已在数据库中更改过的图标.我想迭代可见行,看看是否需要更新任何图标以反映新图标.我不需要测试当前不在视图中的图标,因为它们在渲染时将被正确绘制.
我的问题是getChildAt在看起来不应该返回null.我知道getChildAt只能返回当前可见的视图,但是对于某些可见行,它返回null.
这是我的代码迭代可见行:
Logger.debug("First visible index: " + f_listView.getFirstVisiblePosition());
Logger.debug("Last visible index: " + f_listView.getLastVisiblePosition());
for (int i = f_listView.getFirstVisiblePosition(); i <= f_listView.getLastVisiblePosition(); i++) {
String tag = "asdf"; // Remove when bug is fixed.
if (f_listView == null) {
Logger.debug("f_listView is null");
} else if (f_listView.getChildAt(i) == null) {
Logger.debug("Child at index " + i + " is null");
} else {
tag = (String) f_listView.getChildAt(i).getTag();
Logger.debug("Successful at index " + i + ", tag is: " + …Run Code Online (Sandbox Code Playgroud) 有没有办法计算可见的listview孩子的数量?
我有一个listview,信息链接到一个可以随时更改的数据库.当数据库发生变化时,我发出一个广播通知处理列表视图的ui类.然后更新与改变的数据有关的子元素.我通过为每个listview项提供一个标记来实现这一点,然后遍历listviews以找到与广播中的标记匹配的行.
我想只迭代可见的孩子.我无需手动更新不可见的视图,因为它们将在创建时反映新数据.我目前从listView.getfirstVisiblePosition()迭代到listView.getChildCount().这比没有好,因为我没有检查可见行上方的行,但我也不想检查它们下面的行.
我检查了android开发人员listView页面并没有找到任何东西.有人知道我可以得到可见孩子的数量吗?
谢谢!
我在使用ListView setSelection方法时遇到了一些麻烦.在横向和纵向方向之间切换时,我试图使列表视图保持相同的索引.但是,每次旋转并重新创建活动时,列表视图都会从顶部开始.我使用的代码如下:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
ArrayList<Integer> indices = new ArrayList<Integer>();
for (Integer i : f_checkedMessages) {
indices.add(i);
}
savedInstanceState.putIntegerArrayList("CheckedMessageIndices", indices);
savedInstanceState.putInt("ListIndex", f_listView.getFirstVisiblePosition());
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
ArrayList<Integer> indices = savedInstanceState.getIntegerArrayList("CheckedMessageIndices");
for (Integer i : indices) {
f_checkedMessages.add(i);
}
int listIndex = savedInstanceState.getInt("ListIndex");
f_listView.setSelection(listIndex);
}
Run Code Online (Sandbox Code Playgroud)
我使用调试器来验证listIndex是否是正确的值.还应该提到的是,在更改方向时,检查的列表视图项仍然存在.我知道如果处于触摸模式,setSelected仅选择列表视图项,但文档说这个方法将对齐列表视图,无论是否处于触摸模式.
有谁知道为什么这不起作用或者是否有更好的方法来解决这个问题?
谢谢,非常感谢您的帮助!