XML布局中的神秘(?)错误

时间:2012-03-23 06:44:51

标签: android xml android-layout

我正在尝试创建一个非常简单的列表布局,遵循此处的CommonsWare示例:http://www.commonsware.com/Android/excerpt.pdf。以下是我的相关文件:

RateListDemo.java

package my.ratelist;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class RateListDemo extends ListActivity {

private static final String[] items={"lorem", "ipsum", "dolor", "sit", "amet", "consectetuer", "adipiscing",
    "elit", "morbi", "vel", "ligula", "vitae", "arcu", "aliquet", "mollis", "etiam", "vel", "erat", "placerat",
    "ante", "porttitor", "sodales", "pellentesque", "augue", "purus"};

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setListAdapter(new ArrayAdapter<String>(this, R.layout.row, R.id.label, items));
    setContentView(R.layout.list);
}
}

list.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ListView android:id="@android:id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</RelativeLayout>

row.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<RatingBar
    android:id="@+id/rate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="3" />

<TextView
    android:id="@+id/label"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

所以这是非常奇怪的事情。这段代码运行正常。但是,如果我从row.xml中删除了RatingBar项并仅保留TextView项,那么它会在运行时抛出致命错误。这对我来说毫无意义,特别是因为我有另一个应用程序运行非常相似的布局方案而没有问题。如您所见,在RatingBar项的代码中没有其他参考。此外,如果我在row.xml中切换RatingBar和TextView项的顺序,它会抛出相同的错误。这是什么交易?

初始错误消息是android.widget.ArrayAdapter.createViewFromResource中的NullPointerException。如果有帮助,我可以提供整个日志。

编辑:

嗯,尝试在这些不同的布局配置中运行它并反复出现致命错误之后,它们现在都可以工作了。但我没有改变任何东西,只是尝试运行几次。我觉得在使用XML之前发生过这种情况。那么,问题仍然存在:WTF?

2 个答案:

答案 0 :(得分:0)

(你应该在你拥有它时发布一个堆栈跟踪。)我已经可以猜到它是什么了,它非常简单。代码引用此RatingBar并对其进行操作。当您将其删除时,代码会在查找时出现null并发生错误。

答案 1 :(得分:0)

正如所建议的,我再次尝试了这个,得到了同样的致命错误,然后“清理”了该项目。这似乎解决了这个问题。