未找到Toast资源资源$ NotFoundException:文件res / layout / transient_notification.xml

时间:2016-11-08 06:40:23

标签: android resources toast

这个问题并不总是存在,我找不到问题的原因,请求帮助,谢谢。

我的代码是

private static Toast systemToast;       

public static Toast getSystemToast(Object resId) {
    if (null == systemToast) {
         // Apps is the Application.java
        systemToast = Toast.makeText(Apps.getAppContext(), R.string.me_empty,
                Toast.LENGTH_SHORT);
    }

    String res = String.valueOf(resId);
    if (resId.getClass() == Integer.class) {
        systemToast.setText(Integer.valueOf(res));
    } else if (resId.getClass() == String.class) {
        systemToast.setText(res);
    }
    systemToast.setDuration(Toast.LENGTH_SHORT);
    return systemToast;
}

/ ** Apps.java ** /

  public class Apps extends Application {

    private static Apps sContext;
    @Override
protected void attachBaseContext(Context base) {
    sContext = this;
}
public static Apps getAppContext() {
    return sContext;
}

在某些Android设备中,出现错误,错误日志为:

  android.content.res.Resources$NotFoundException: File res/layout
/transient_notification.xml from xml type layout resource ID #0x10900ef at 
android.content.res.Resources.loadXmlResourceParser(Resources.java:2720) at 
android.content.res.Resources.loadXmlResourceParser(Resources.java:2675) at 
android.content.res.Resources.getLayout(Resources.java:1096) at 
android.view.LayoutInflater.inflate(LayoutInflater.java:422) at 
android.view.LayoutInflater.inflate(LayoutInflater.java:368) at     
android.widget.Toast.makeText(Toast.java:282) 

1 个答案:

答案 0 :(得分:1)

当传递上下文对象未正确初始化或可能是其引用为null时,可能会发生此错误。

1.如果您使用的是Fragment,则可以在onAttach方法中找到Context。并传递 getSystemToast 方法。

 **@Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }**

2。如果您正在使用Activity,那么使用 getBaseContext()方法或 ActivityName.this 获取上下文两者都将返回您的上下文

您无需为get Context定义函数。 Android为获取上下文提供了以下方法。 1. getApplicationContext()应用程序上下文与Applicaition关联,并且在整个生命周期中始终相同。

2.getBaseContext()

3.onAttach()in Fragment。