以下是SimpleCursorAdapter中行模板的布局。
ID next_arrow 的ImageView会在方向更改时永久消失(返回原始方向不会重新显示)。如果我用@ drawable / icon(标准sym_def_app_icon的副本)替换@ drawable / arrow,它可以正常工作。所有可用的drawable都是对PNG文件的简单引用。
我认为它可能与图标具有不同的尺寸有关,但是我将@ drawable / icon的大小调整为与箭头完全相同的尺寸,它仍然正常工作,而箭头没有。
更新
好吧,它甚至更奇怪了。我将 arrow.png 重命名为 something_not_called_arrow.png 并且......它可以正常工作。发生了什么事?
这不是我第一次看到这种情况发生。今天早些时候我有另一个可绘制的PNG,它在Eclipse Graphical Layout视图中显示得很好,但在我重命名文件之前,它在模拟器或设备上完全没有显示出来。我尝试清理并刷新项目,然后重新启动Eclipse。
另一次更新
在不同情况下再次发生这种情况。在Activity onCreate()中,我在一些资源上调用findViewById()来配置它们,一切都在第一次加载时正常工作。当由于方向更改而调用onCreate()时,findViewById()将为所有这些资源返回null。这是令人抓狂的,涉及android:configChanges="keyboardHidden|orientation"
的答案根本不是真正的解决方案,它们只是掩盖了问题。
在这种情况下,我通过将活动的布局xml从 share.xml 重命名为 share_activity_layout.xml 来“修复”它。我开始认为R文件生成和资源ID管理中存在某种错误。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="90dp"
android:background="@drawable/product_list_divider"
android:paddingTop="10dp">
<ImageView android:src="@drawable/ninja_20_65"
android:id="@+id/category_icon"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginTop="3dp"/>
<LinearLayout android:orientation="vertical"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content">
<TextView android:id="@+id/category_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Name"
style="@style/CategoryHeading" android:layout_marginTop="5dp"/>
<TextView android:id="@+id/category_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Description"
style="@style/CategoryDescription"/>
</LinearLayout>
<ImageView android:src="@drawable/arrow"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content" android:layout_marginTop="20dp" android:id="@+id/next_arrow"/>
</LinearLayout>
我正在使用Android 2.1。
答案 0 :(得分:2)
我将arrow.png
重命名为something_not_called_arrow.png
并且有效。
随后出现了类似的问题,我通过将活动的布局xml从share.xml重命名为share_activity_layout.xml来“修复”。
我认为R文件生成和资源ID管理中存在一个错误。
答案 1 :(得分:0)
两个想法。
你的资源文件夹中有另一个名为arrow的drawable吗?当方向发生变化时,android将重新创建活动并重新加载布局和图像。它可能会从某个地方拾取不同的图像。那些可以解释为什么它重命名drawable时它的工作原理。
秒。你为什么把图像宽度设置为0?将它设置为包装内容可能没问题。
答案 2 :(得分:0)
您的资源文件夹中包含许多子目录。
依旧......
如果你使用R.drawable.arrow,android会调查drawable来加载它。问题是(实际上它是一个特征),如果你处于横向模式,它将首先在drawable-land中看,如果它在那里找不到任何东西,那么只能在drawable之后。 这同样适用于不同的分辨率等。
所以我的猜测是你有可拉乱的土地搞砸了,我鼓励你看看那里是否有任何档案。如果是,请删除它们。
同样适用于布局。