Android自定义背景导致列表适配器的数字格式异常

时间:2014-01-22 03:22:19

标签: java android android-listfragment

所以我的一个Android应用程序出现了一些奇怪的行为。我有两个应用程序,都有相同的自定义背景图像,一个工作正常。但是,另一方不想合作。

我通过以下方式在AndroidManifest.xml中添加了一个自定义主题:

<application
    ...
    android:theme="@style/MyTheme" >

我将styles.xml(整个文件)更改为以下内容:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
  <style name="MyTheme" parent="android:Theme.Holo">
    <item name="android:background">@drawable/dummy_background_image</item>
  </style>
</resources>

同样,这适用于app#1。但app#2 ......

当我这样称呼时:

    setListAdapter(new ArrayAdapter<Game>(getActivity(),
                                                  android.R.layout.simple_list_item_activated_1,
                                                  android.R.id.text1,
                                                  gameCategories.getCategories()));

它抛出:

01-22 21:30:21.439: E/AndroidRuntime(28044): FATAL EXCEPTION: main
01-22 21:30:21.439: E/AndroidRuntime(28044): java.lang.NumberFormatException: Invalid int: "res/drawable/dummy_background_image.png"
01-22 21:30:21.439: E/AndroidRuntime(28044):    at java.lang.Integer.invalidInt(Integer.java:138)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at java.lang.Integer.parse(Integer.java:375)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at java.lang.Integer.parseInt(Integer.java:366)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:122)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.content.res.TypedArray.getInt(TypedArray.java:255)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.view.animation.Animation.<init>(Animation.java:251)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.view.animation.AlphaAnimation.<init>(AlphaAnimation.java:40)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:117)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:92)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:73)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.support.v4.app.ListFragment.setListShown(ListFragment.java:290)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.support.v4.app.ListFragment.setListAdapter(ListFragment.java:186)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at com.example.legacy.GameListFragment.updateListAdapter(GameListFragment.java:107)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at com.example.legacy.GameListActivity.updateListAdapter(GameListActivity.java:158)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at com.example.legacy.databaseAccess.DatabaseAccessTask.onPostExecute(DatabaseAccessTask.java:57)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at com.example.legacy.databaseAccess.DatabaseAccessTask.onPostExecute(DatabaseAccessTask.java:1)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.os.AsyncTask.finish(AsyncTask.java:631)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.os.Looper.loop(Looper.java:137)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at android.app.ActivityThread.main(ActivityThread.java:5455)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at java.lang.reflect.Method.invokeNative(Native Method)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at java.lang.reflect.Method.invoke(Method.java:525)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
01-22 21:30:21.439: E/AndroidRuntime(28044):    at dalvik.system.NativeStart.main(Native Method)

当我进入调试模式时,应用程序会短暂显示应用程序(在它到达列表适配器之前),因此它至少可以找到该文件。

显然,我知道它是一个字符串,并将其转换为int将失败。但是为什么将它转换为int并且没有得到相应的数字呢?为什么它适用于app#1和app#2?

提前致谢。

3 个答案:

答案 0 :(得分:1)

问题在于

  <item name="android:background">@drawable/dummy_background_image</item>

相反,请使用

  <item name="android:windowBackground">@drawable/dummy_background_image</item>

它会起作用

答案 1 :(得分:0)

如上所述,尝试使用自定义主题设置背景图像时遇到了同样的错误。在我的情况下,我没有调用setListAdaptor,但是当我将焦点从一个输入字段切换到另一个输入字段时,抛出了相同的异常。此外,它只发生在Android 4.3上,而不是4.4。我不确定为什么它不起作用,因为它似乎是推荐的方法之一,但我的解决方法是以编程方式设置背景。当我从styles.xml文件中删除“item”标记时,我停止了错误,并在我的Activity中添加了这个(我碰巧需要为webview设置背景)。

webView.setBackgroundResource(R.drawable.background);

答案 2 :(得分:0)

而不是 android:background 使用 android:windowBackground ...这对我有用..