需要从非上下文类访问资源,而无需通过深层调用堆栈传递上下文。
我已经阅读了关于这个主题的所有答案,但是这个类不是从创建的Activity
,而且离它真的很远。通过所有调用发送上下文的方式不是一种变体,因为它需要通过许多类和方法来发送它,而这些类和方法不需要了解有关context的任何信息。
我是否有机会在不通过非常深的调用堆栈传递上下文的情况下访问资源?需要什么静态方法吗?如果无法以简单自然的方式从任何应用程序的地方获取应用程序资源,那将是非常惊人的。
您可以扩展 Android 的 Application 类并将其实现为单例,这将使其全局可用。
public class SampleApplication extends Application {
private static SampleApplication INSTANCE;
@Override
public void onCreate() {
super.onCreate();
INSTANCE = this;
}
public static SampleApplication instance() {
return INSTANCE;
}
}
如果您这样做,则需要在 AndroidManifest.xml 中进行一些工作。这将告诉框架加载您的应用程序而不是默认应用程序。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourdomain"
android:versionCode="1"
android:versionName="1.0">
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:name=".SampleApplication">
<activity android:name=".SampleActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
这将很容易地为您提供一种在必要时获取应用程序上下文的机制。您甚至可以实现一个返回资源的静态方法,但以下应该可以工作。
SampleApplication.instance().getResources();
不知道你是否试过这个,但它应该工作。我没有测试这段代码,所以可能需要一些调整,但你应该明白了。