java - 一段时间后未调用 ViewTreeObserver 监听器

标签 java android

我在使用 ViewTreeObserver 时遇到了很大的困难。在一段不可预知的时间段内一切正常,然后监听器不再运行。这肯定是因为文档中写的:The returned ViewTreeObserver observer is not guaranteed to remain valid for the lifetime of this View 因此,我每次更改 View 时都会重做设置:

   protected void shrinkToFit(final TextView t) {
    if(vto==null||!vto.isAlive()){
    vto = t.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        public void onGlobalLayout() {
            doAdjust(t);
        }
    });
    }
}

下面是我如何调用它:

TextView t = (TextView) findViewById(R.id.maindesc);

                t.setTextSize(Constants.MAINDESC_SIZE);

                String todisp_1 = tarifreadtemp.area_desc + ":"
                        + tarifreadtemp.area_tarifuserdesc;
                shrinkToFit(t);
                t.setText(todisp_1);
                t.invalidate();

最佳答案

通常我在重绘或更改布局之前将 addOnGlobalLayoutListener 监听器添加到我的 View (这可能发生在我第一次初始化 View 时或可能在更改其布局之前)并且在监听器中的第一件事我所做的是从 View 中删除监听器。

关于java - 一段时间后未调用 ViewTreeObserver 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9427682/

相关文章:

java - WEKA - 从 Java 中的特征向量列表创建实例

android - 如何从子模块android中删除firebase分析?

android - android中的多语言键盘选择问题

Java如何每秒增加一个int 1直到它达到15

java - 错误 "The method withDefaultPasswordEncoder() is undefined for the type User"Spring Boot密码

java - 在我从 Java 中的方法返回之前需要等待异步 api 回调

android - C++ NDK 中的 C2DM

android - Notification Builder 不能接受 "this"作为 "context"的替代,为什么?

java - 无法在第 27805 行打开文件

java - ObjectMapper.readValue 可以返回空值吗?