从onCreate中提取代码导致资源返回null

时间:2014-01-04 18:48:01

标签: android android-activity android-resources android-lifecycle

返回故事

我正在以编程方式设置背景,所以我在onCreate中执行以下操作,它运行正常。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dogs);
    Drawable bkg = getResources().getDrawable(R.drawable.bg2);
    bkg.setAlpha(50);
    findViewById(R.id.bkg).setBackgroundDrawable(bkg);
    ...
}

问题

需要为多个活动重复相同的过程,我决定将代码提取到一个帮助类调用MyVars和MyVars里面我有

private static Drawable bkg = null;

public static void setPageBackground(Context context, View view) {
    if (null == bkg) {
        Drawable bkg = context.getResources().getDrawable(R.drawable.bg2);
        bkg.setAlpha(50);
    }
    view.setBackgroundDrawable(bkg);
}

然后在onCreate里面我现在有

MyVars.setPageBackground(this, findViewById(R.id.bkg));

但是bkg始终为null,这意味着context.getResources().getDrawable(R.drawable.bg2);始终返回null。有谁理解为什么?顺便说一句,我运行调试器,实际上资源总是返回null。

1 个答案:

答案 0 :(得分:0)

bkg始终为null,因为您将drawable分配给方法字段bkg而不是类字段bkg:

将您的方法更改为此

public static void setPageBackground(Context context, View view) {
    if (null == bkg) {
        //Drawable bkg = getResources().getDrawable(R.drawable.bg2);

        //use class field bkg
        bkg = context.getResources().getDrawable(R.drawable.bg2);
        bkg.setAlpha(50);
    }
    view.setBackgroundDrawable(bkg);
}