gpt4 book ai didi

Android:布局后在屏幕上获取 ListView 项目位置

转载 作者:行者123 更新时间:2023-11-29 16:10:59 25 4
gpt4 key购买 nike

我目前正在开发一个功能类似于 Roman Nurik 的粘性 ScrollView 技术的 fragment :

http://code.google.com/p/romannurik-code/source/browse/misc/scrolltricks

但是,我想将它与 ListView 一起使用,并将其固定在屏幕的顶部和底部。通过在屏幕的顶部和底部使用两个隐藏 View ,并在正确的项目到达顶部或底部时使用列表取消隐藏它们,我已经取得了一定的成功:

//Similar to Roman's Stick ScrollView
@Override
public void onScrollChanged() {


if(scrollListen){
if(mMovingClock != null && mMovingClock.getTop() <= list.getTop()){
//Log.i("DraftSync", "View at " + String.valueOf(mMovingClock.getTop()));
clockTop.setVisibility(View.VISIBLE);
}else {
clockTop.setVisibility(View.INVISIBLE);
}


if(mMovingClock != null && mMovingClock.getBottom() >= list.getBottom()){
clockBottom.setVisibility(View.VISIBLE);
}else {
clockBottom.setVisibility(View.INVISIBLE);
}
}

}

我遇到的问题是,如果我的目标列表项 (mMovingClock) 是 fragment 开始时屏幕上显示的初始项之一,则 list.GetTop() 方法返回零。我进行了广泛的搜索,并了解到这是因为它在屏幕上的位置呈现之前对其进行了测量,但我在我认为应该的位置启用了 scrollListen:

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {


rootView = inflater.inflate(R.layout.fragment_draft, container, false);
list = (ObservableListView)rootView.findViewById(R.id.draft_queue);
list.setCallbacks(this);

...


list.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
onScrollChanged();
scrollListen = true;

}
});


return rootView;

}

我认为我正确地遵循了示例,但是在正确测量 mMovingClock 之前将 scrollListen 设置为 true。谁能弄清楚为什么这个 View 总是为 getTop() 和 getY() 返回 0,直到它滚动出屏幕一次?之后一切都很好。

有什么建议吗?

谢谢,乔希

最佳答案

好吧,我觉得错过这个很傻,但在这里:

在布局的 xml 中,我将 ListView 设置为 wrap_content 而不是 fill_parent。我花了很多时间查看 fragment 编码,却从未考虑过检查布局。

感谢 Flavio,他的回答似乎应该有效,但最终是不必要的。

关于Android:布局后在屏幕上获取 ListView 项目位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com