在android ListView中以编程方式选择ListItem时的最小滚动量

时间:2010-06-14 13:16:44

标签: android listview layout

参考这个问题:how does scrolling in android listview work?

在从状态2更改为3时,单击的listitem的大小会增加以显示更多信息。如果点击的项目是屏幕上的最后一项,则扩展的列表项目不完全可见,因为新内容会在屏幕底部流出。

我目前的解决方案是调用“setSelection(index)”,如果单击了最后一个可见的列表项。这导致一个状态是选择被带到屏幕的顶部。这很烦人,因为listitem从下到上移动。

有没有办法避免这种情况?这意味着,是否有一些东西让列表视图知道,那应该只滚动最小像素数,以便clickeditem完全可见? 或者让我自己编程这个功能?

1 个答案:

答案 0 :(得分:3)

将自定义OnItemClickListener添加到ListView。像这样实现OnItemClickListener.onItemClick:

public void onItemClick(final AdapterView<?> parent, final View view,
        int position, long id) {
    View hiddenContent = view.findViewById(R.id.hiddenContent);
    hiddenContent.setVisibility(View.VISIBLE);

    // At this point the layout hasn't be redone and you don't have reliable 
    // measurements on the view.  It would be nice to do something after the view
    // has gone through another layout
    view.post(new Runnable() {
        public void run() {
            Rect r = new Rect();
            view.getDrawingRect(r);
            parent.requestChildRectangleOnScreen(view, r, false);
        }
    });
}

每当您单击列表项以显示隐藏内容时,ListView控件将继续执行并执行所需的滚动(如果不需要则不滚动)以完全显示该行。