参考这个问题:how does scrolling in android listview work?
在从状态2更改为3时,单击的listitem的大小会增加以显示更多信息。如果点击的项目是屏幕上的最后一项,则扩展的列表项目不完全可见,因为新内容会在屏幕底部流出。
我目前的解决方案是调用“setSelection(index)”,如果单击了最后一个可见的列表项。这导致一个状态是选择被带到屏幕的顶部。这很烦人,因为listitem从下到上移动。
有没有办法避免这种情况?这意味着,是否有一些东西让列表视图知道,那应该只滚动最小像素数,以便clickeditem完全可见? 或者让我自己编程这个功能?
答案 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控件将继续执行并执行所需的滚动(如果不需要则不滚动)以完全显示该行。