gpt4 book ai didi

android - viewTreeObserver.OnGlobalLayoutListener , onGlobalLayout , 无限循环

转载 作者:行者123 更新时间:2023-11-29 14:13:44 25 4
gpt4 key购买 nike

我在两个 TextView 的父 View 上使用 viewTreeObserver.addOnGlobalLayoutListener , onGlobalLayout 以获得一个的宽度和另一个的高度

 private int row_height;
private int column_width;
private RelativeLayout RL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

RL = (RelativeLayout) findViewById(R.id.RL);
final TextView textView = (TextView) findViewById(R.id.textView33);
final TextView textView2 = (TextView) findViewById(R.id.textView25);
ViewTreeObserver viewTreeObserver = RL.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
column_width = textView2.getWidth();
row_height = textView.getHeight();
textView.setText("column_width" + column_width + "\nrow_height" + row_height);
CreateEvent(0, 6, 4);
CreateEvent(0, 8, 6);
CreateEvent(0, 7, 7);
CreateEvent(0, 5, 2);
}
});

//CreateEvent(0,6,4); //not working
}

问题是 CreateEvent 被无限次调用,这会减慢我的应用程序,那么如何解决这个问题?

我想做的是,当布局完全显示时,我保存 textView25 的宽度和 textView33 的高度,以便在 CreateEvent 中使用它们> 并且只有当布局从 portrait 更改为 landscape

时它们才会更改

最佳答案

我遇到了同样的问题。正如另一位回答者所建议的那样,我试图直接从 ViewTreeObserver 对象中删除 OnGlobalLayoutListener ,但它给出了一个错误。最后,我从 View 中抓取树观察器并从中删除 OnGlobalLayoutListener,如下所示:

private class GLListener implements ViewTreeObserver.OnGlobalLayoutListener
{
@Override
public void onGlobalLayout()
{
adView.getViewTreeObserver().removeOnGlobalLayoutListener(glListener); //or "this"
/*
*CODE HERE RUNS ONCE
*/
}
}

GLListener 是我实例化并作为 OnGlobalLayoutListener 对象添加到 adView 的类,adView(您可能已经猜到了)是一个 AdView。我这样做是为了不使用嵌套类。你可以让它匿名。无论哪种方式,都可以使用“this”而不是像我那样使用对象引用。

关于android - viewTreeObserver.OnGlobalLayoutListener , onGlobalLayout , 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770652/

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