不从Application继承的类的getContext()。getResources()

时间:2019-10-31 03:45:47

标签: android kotlin

我想从类中的函数返回位图,大多数时候,我会返回生成的图像,效果很好,但是在某些情况下,我想从资源中返回文件。

This answerBitmapFactory.decodeResource and drawable* folders问题告诉我使用

Resources res = getContext().getResources();
int id = R.drawable.image; 
Bitmap b = BitmapFactory.decodeResource(res, id);
我翻译成的

val res = getContext().getResources()
val errorbitmap:Bitmap = BitmapFactory.decodeResource( res,  R.drawable.pm5544)

但是当然会有编译错误:

  

未解决的参考:getContext

哪个使我们想到了我的问题:

  • 我需要在哪个对象上致电getContext() 或解决实际问题:
  • 我应该使用另一个API从资源中获取位图吗?

2 个答案:

答案 0 :(得分:1)

如果您从MainActivity运行以下代码,则可以访问resources

val res = resources
val id = R.drawable.image
val b = BitmapFactory.decodeResource(res, id)

要在对象中使用它,您必须将资源作为参数传递,或者如果只需要一个图像,则将其作为参数传递。

答案 1 :(得分:1)

  

我需要在哪个对象上调用getContext()?

使用Application上下文。您可以在应用程序中的任何位置使用应用程序上下文。

创建自己的Application

public class AppApplication extends Application {

    private static AppApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public static AppApplication getInstance() {
        return instance;
    }
}

以这种方式访问​​应用程序上下文:

Context appContext = AppApplication.getInstance().getApplicationContext();

现在appContext可以访问您的资源

科林版本:

class AppApplication :Application(){

    companion object{
        private lateinit var instance:AppApplication
        fun getInstance():AppApplication{
            return instance
        }
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
    }
}

访问Application上下文

val applicationContext = AppApplication.getInstance().applicationContext

确保在AppApplication中添加自定义Manifest

<application
    android:name=".AppApplication"
    ............
</application>

使用应用程序上下文是安全的,因为没有ActivityFragment生命周期问题