Я пытаюсь создать очень простой макет списка, следуя приведенным здесь примерам CommonsWare: http://www.commonsware.com/Android/excerpt.pdf. Вот мои соответствующие файлы:Загадочная (?) Ошибка в XML-макете
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>
Так вот действительно странно. Этот код работает нормально. Однако, если я удаляю элемент RatingBar из row.xml и оставляю только элемент TextView, тогда он запускает фатальные ошибки при запуске. Это не имеет для меня никакого смысла, тем более, что у меня есть другое приложение, которое запускает очень похожую схему компоновки без проблем. Как вы можете видеть, ссылки на код RatingBar отсутствуют в другом месте кода. Кроме того, если я переключу порядок элементов RatingBar и TextView в row.xml, он выдаст ту же ошибку. В чем дело?
Исходное сообщение об ошибке - это NullPointerException в файле android.widget.ArrayAdapter.createViewFromResource. Я могу предоставить весь журнал, если это поможет.
EDIT:
Гм, ну, после попытки запустить его в этих различных конфигурациях компоновки и неоднократно получать фатальные ошибки, все они сейчас работают. Но я ничего не менял, кроме как попытаться запустить его несколько раз. Я чувствую, что это случилось со мной раньше с XML. Итак, остается вопрос: WTF?
Вы очистили проект после перемещения или снятия заказа вашего RatingBar? Я думаю, что идентификатор класса R не всегда регенерируется после изменений в XML, когда вы пытаетесь запустить проект, поэтому он может все еще иметь старую ссылку на этот измененный объект ... и это объясняет, почему после нескольких попыток он начинает работать. – Adinia
Да, это определенно кажется, что на работе есть какая-то проблема с артефактом. Мне никогда не приходилось чистить проекты раньше, но я попробую в следующий раз. – osweetman