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

在android ListView中以编程方式选择ListItem时的最小滚动量,android,listview,layout,Android,Listview,Layout,关于这个问题: 从状态2更改为3时,单击的listitem的大小将增加以显示更多信息。如果单击的项目是屏幕上的最后一个项目,则扩展的listitem不完全可见,因为新内容从屏幕底部流出 我当前的解决方案是,如果单击了最后一个可见的listitem,则调用“setSelection(index)”。当选择显示在屏幕顶部时,此结果将显示在状态中。这很烦人,因为listitem从下到上移动 有没有办法避免这种情况?这意味着,是否有什么要让listview知道的,即只滚动最小数量的像素,以便clicke

关于这个问题:

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

我当前的解决方案是,如果单击了最后一个可见的listitem,则调用“setSelection(index)”。当选择显示在屏幕顶部时,此结果将显示在状态中。这很烦人,因为listitem从下到上移动

有没有办法避免这种情况?这意味着,是否有什么要让listview知道的,即只滚动最小数量的像素,以便clickeditem完全可见?
或者我必须自己编写此功能吗?

将自定义侦听器添加到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);
        }
    });
}
public void onItemClick(最终适配器视图父视图、最终视图、,
内部位置,长id){
View-hiddenContent=View.findviewbyd(R.id.hiddenContent);
hiddenContent.setVisibility(View.VISIBLE);
//在这一点上,布局还没有重做,你没有可靠的
//在视图上进行测量。在视图之后做一些事情会很好
//经历了另一个布局
view.post(新的Runnable(){
公开募捐{
Rect r=新的Rect();
view.getDrawingRect(r);
屏幕上的parent.requestChildRectangler(视图、r、false);
}
});
}

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

向ListView添加自定义Listener。实现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);
        }
    });
}
public void onItemClick(最终适配器视图父视图、最终视图、,
内部位置,长id){
View-hiddenContent=View.findviewbyd(R.id.hiddenContent);
hiddenContent.setVisibility(View.VISIBLE);
//在这一点上,布局还没有重做,你没有可靠的
//在视图上进行测量。在视图之后做一些事情会很好
//经历了另一个布局
view.post(新的Runnable(){
公开募捐{
Rect r=新的Rect();
view.getDrawingRect(r);
屏幕上的parent.requestChildRectangler(视图、r、false);
}
});
}
每当您单击列表项以显示隐藏内容时,ListView控件将继续执行并执行任何需要滚动的操作(如果不需要滚动,则不进行滚动)以完全显示该行