小编Chr*_*ris的帖子

ListView getChildAt为可见子项返回null

我从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)

null android listview

67
推荐指数
2
解决办法
5万
查看次数

Android:获取列表视图中可见子项的计数

有没有办法计算可见的listview孩子的数量?

我有一个listview,信息链接到一个可以随时更改的数据库.当数据库发生变化时,我发出一个广播通知处理列表视图的ui类.然后更新与改变的数据有关的子元素.我通过为每个listview项提供一个标记来实现这一点,然后遍历listviews以找到与广播中的标记匹配的行.

我想只迭代可见的孩子.我无需手动更新不可见的视图,因为它们将在创建时反映新数据.我目前从listView.getfirstVisiblePosition()迭代到listView.getChildCount().这比没有好,因为我没有检查可见行上方的行,但我也不想检查它们下面的行.

我检查了android开发人员listView页面并没有找到任何东西.有人知道我可以得到可见孩子的数量吗?

谢谢!

android listview count visible

22
推荐指数
2
解决办法
3万
查看次数

setSelection不更改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仅选择列表视图项,但文档说这个方法将对齐列表视图,无论是否处于触摸模式.

有谁知道为什么这不起作用或者是否有更好的方法来解决这个问题?

谢谢,非常感谢您的帮助!

android listview orientation

14
推荐指数
3
解决办法
2万
查看次数

标签 统计

android ×3

listview ×3

count ×1

null ×1

orientation ×1

visible ×1