2011-09-23 56 views
7

我发布这个问题,希望我能得到某种确定的答案。Android:访问资源时没有活动或上下文refeerence

如果没有活动或上下文参考,是否真的无法访问资源?在需要的时候传递这些引用是为了访问一些与UI无关的值或资产或字符串,从而导致过于复杂的代码。

加上所有这些潜在的悬挂引用。

此外,这完全破坏了各种设计模式,如单例,在获取实例时必须提供参数。

把静态参考

那么,有没有一种方法或做整个社会刚刚与这个问题居住。

回答

0

使您的Application类成为单身人士并使用它。这是一个Context。所有资源都与您的应用绑定,因此您需要一个Context参考。如果您不想动态加载它们,可以在单例类中预加载字符串等。

9

你的资源被捆绑到一个上下文中,这是一个事实,你不能改变它。

这里是你可以做什么:

扩展Application,获取应用程序上下文和使用,作为一个静态辅助。

public class App extends Application { 

    private static Context mContext; 

    public static Resources getResources() { 
     return mContext.getResources(); 
    } 

    public void onCreate() { 
     super.onCreate(); 
     mContext = getApplicationContext(); 
    } 
} 

你的清单:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:name="your.package.path.to.App"> 
+0

另一种方法是将有活动加载资源,然后传递这些作为参数传递给其它目的而不是传递一个上下文对象。但是这种模式是我使用的。 :) –

+1

好像我们不能调用方法'getResources',因为已经存在一个名为'getResources'的非静态成员方法,它继承自'ContextWrapper',[见这里](https://github.com/android/ platform_frameworks_base/blob/master/core/java/android/content/ContextWrapper.java#L83) – sled

+0

将'getResouces()'重命名为'getResourcesSafe()'或其他 – ChrisMcJava

相关问题