【问题标题】:Android: Detect if a View's parent Activity is pausedAndroid:检测 View 的父 Activity 是否已暂停
【发布时间】:2010-06-20 22:25:40
【问题描述】:

在我的一个活动中,我有一个显示位置列表的 ListView。对于每个列表项,我想要一个指向相应位置方向的小箭头图标。我通过扩展 ImageView 实现了这个图标。这个自定义视图有一个监听器,它通过相应地旋转图标图像来响应设备方向的变化。我在 onAttachedToWindow() 方法中注册侦听器并在 onDetachedFromWindow() 中取消注册它。这种方法有效,但问题是 onDetachedFromWindow() 有时仅在包含的 Activity 暂停后很长时间才会被调用。此外,整个布局整体看起来有点hacky。所以我的问题是:是否有适当的方法来取消注册监听器,或者您会以完全不同的方式开始实现它吗?

【问题讨论】:

    标签: android view android-activity listener


    【解决方案1】:

    我认为你遇到了困难,因为你承认你的设计很老套。我认为您可能应该做的是让您的 Activity 监听设备方向并使用onPause/onResume 来处理方向更改的注册。然后有一个自定义光标,当它发生变化时它会被 Activity 更新。然后自定义光标可以调用notifyDataSetChanged 告诉ListView 进行更新。然后在getView 调用中,您可以传入正确显示箭头所需的数据。这样,唯一会更新的箭头是那些可见的。您将只有一个地方接收方向数据,稍后您可以处理 onScrollStateChanged 并在用户滚动时停止更新箭头,如果它对滚动动画的影响太大。

    【讨论】:

    • 非常感谢!在 Activity 中监听方向似乎是正确的做法,因为不需要在多个地方这样做,而且 Activity 也是我可以使用 onPause 和 onStart 的唯一地方。但是,我开始以这种方式实现它并发现了一个新问题:以如此高的频率调用 notifyDataSetChanged 对性能的影响更大,因为 getView 还会更新有关列表项的所有其他内容。必须有一种方法来确保只有图标受到这些更新的影响。我现在该怎么办?
    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多