gpt4 book ai didi

android - ListView 中的 OnGlobalLayoutListener

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:17 25 4
gpt4 key购买 nike

我希望能够使用动画扩展我的 ListView 中的行。因此我需要知道正在扩展的 View 的高度。我在 ArrayAdaptergetView() 方法中使用它:

mDetailsView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
mDetailsView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

onClickListener.setHeight(mDetailsView.getHeight());
mDetailsView.setVisibility(View.GONE);
}
});

这对于开始时在屏幕上可见的行来说效果很好,但是当我向下滚动时,不会为一开始不可见的行调用 onGlobalLayout 方法。

如何获得这些行的高度?

最佳答案

ListView 的实现可能不会执行整个布局,因此 ViewTreeObserver 实际上从未看到正在进行的布局。

除非有一些我不知道的特定手机壳,否则您可以使用 Views 中的 post 方法在 View 中执行 runnable。

mDetailsView.post(new Runnable() {
@Override
public void run() {
onClickListener.setHeight(mDetailsView.getHeight());
mDetailsView.setVisibility(View.GONE);
}
});

编辑:

我不知道整个 getView()方法是怎么布局的。如果我不得不猜测的话,问题是 ListView 根本没有请求布局。相反,它自己为每个 View 完成工作以加快速度。你可以尝试的是:

public void getView(int position, View convertView, ViewGroup parent) {

/*
* set your view up
*/

mDetailsView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
mDetailsView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

onClickListener.setHeight(mDetailsView.getHeight());
mDetailsView.setVisibility(View.GONE);
}
});

notifyDataSetInvalidated(); // Notify the ListView() and any other listeners that your views are invalid.
return view;
}

<罢工>

新编辑:在 notifyDataSetInvalidated() 中使用通常是个坏主意,尤其是在 getView() 中使用时。

要预先测量布局,您可以使用它的布局参数,或者如果它们不存在则为其提供新的布局参数。

    LayoutParams params = newView.getLayoutParams();
if (params == null) {
params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
}
final int widthSpec = MeasureSpec.makeMeasureSpec(parent.getWidth(), MeasureSpec.UNSPECIFIED);
final int heightSpec = MeasureSpec.makeMeasureSpec(parent.getHeight(), MeasureSpec.UNSPECIFIED);
newView.measure(widthSpec, heightSpec);

关于android - ListView 中的 OnGlobalLayoutListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325125/

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