如何在Android中创建全局对象拥有的视图



我有一个由Activity类拥有的Web视图。我通过findViewId()访问网络视图。这很有效。现在我想让webview在全球范围内持久存在。所以我扩展了Application类。我如何从那里访问webView。因为Application类不允许findViewId()方法。WebView是在activity_layout.xml中定义的,所以我认为这适用于任何视图,而不仅仅是以这种方式定义的WebView。

<WebView  
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:gravity="top"   />  

这样做的原因是,即使活动被破坏,我也需要Web视图保持不变,这样在活动的OnDestroy之后Web视图就不会刷新。

谢谢。

这样做的原因是,即使活动被破坏,我也需要Web视图保持不变

这是个坏主意。即使您能够在父"活动"销毁后保留对WebView的引用,它也将无效,因为它引用的WebView对象将与"活动"一起销毁。这是一个很好的例子,说明了为什么全局数据在Java等面向对象语言中不受欢迎。

一种可能的解决方案是将网页及其所有资源(图像等)缓存到本地文件系统。然后,当"活动"重新启动时,您可以检查是否有缓存,并直接从磁盘加载缓存(如果存在)。这将大大增加您的响应时间。

为什么不使用继承?

您可以创建以WebView为属性的基本活动。

class BaseActivity Extends Activity{
  protected WebView webview;
  // and so on and so forth
}

最新更新