Ресурсы $ NotFoundException для android.R.layout.simple_list_item_1

1

Я читаю книгу "Android 2" от Арно Беккера и Маркуса Панта. В ходе этой книги они разрабатывают небольшое приложение для Android с читателем. В какой-то момент я получаю ошибку, которую я не могу решить. У меня есть ListActivity, который должен быть заполнен статическими данными. Всякий раз, когда я запускаю действие, я получаю Исключение ресурсов $ NotFoundException с текстом: "Файл res/layout/simple_list_item_1.xml из идентификатора ресурса макета типа xml".

Вот код, вызывающий действие:

public void onClickManageContacts(View view)
{
   final Intent intent=new Intent(this,ListContacts.class);
   startActivity(intent);      
}

Вот код действия:

package androidbook.amando.gui;

import androidbook.amando.R;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class ListContacts extends ListActivity {

   private static final String[] NAMES = new String[] { "Berthold Schmitz",
         "Chantal Schulze", "Bartolomäus Weissenbaum", "Jean-Paul Küppers" };

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.geokontakte_auflisten);

      showContacts();
   }

   private void showContacts() {
      final ArrayAdapter<String> contactAdapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_list_item_1, NAMES);
      setListAdapter(contactAdapter);
   }
}

Рез/макет/geokontakte_auflisten.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <Spinner
    android:layout_height="wrap_content"
    android:drawSelectorOnTop="true"
    android:id="@+id/sp_sortierung"
    android:layout_width="wrap_content"
    android:entries="@array/Sortierung">
  </Spinner>
  <ListView
    android:layout_height="wrap_content"
    android:id="@+id/android:list"
    android:layout_width="wrap_content"
    android:textFilterEnabled="true"
    android:cacheColorHint="@color/hintergrund">
  </ListView>
  <TextView
    android:id="@+id/android:empty"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/txt_geokontakt_auflisten_keineDaten">
  </TextView>
</LinearLayout>

Время, когда исключение выбрано, после завершения метода showContacts(). Здесь трассировка стека:

Thread [<1> main] (Suspended (exception Resources$NotFoundException))   
   Resources.loadXmlResourceParser(int, String) line: 1877   
   Resources.getLayout(int) line: 731   
   PhoneLayoutInflater(LayoutInflater).inflate(int, ViewGroup, boolean) line: 318   
   ArrayAdapter.createViewFromResource(int, View, ViewGroup, int) line: 332   
   ArrayAdapter.getView(int, View, ViewGroup) line: 323   
   ListView(AbsListView).obtainView(int, boolean[]) line: 1430   
   ListView.measureHeightOfChildren(int, int, int, int, int) line: 1216   
   ListView.onMeasure(int, int) line: 1127   
   ListView(View).measure(int, int) line: 8313   
   LinearLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 3138   
   LinearLayout.measureChildBeforeLayout(View, int, int, int, int, int) line: 1017   
   LinearLayout.measureVertical(int, int) line: 386   
   LinearLayout.onMeasure(int, int) line: 309   
   LinearLayout(View).measure(int, int) line: 8313   
   FrameLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 3138   
   FrameLayout.onMeasure(int, int) line: 250   
   FrameLayout(View).measure(int, int) line: 8313   
   PhoneWindow$DecorView(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 3138   
   PhoneWindow$DecorView(FrameLayout).onMeasure(int, int) line: 250   
   PhoneWindow$DecorView(View).measure(int, int) line: 8313   
   ViewRoot.performTraversals() line: 839   
   ViewRoot.handleMessage(Message) line: 1859   
   ViewRoot(Handler).dispatchMessage(Message) line: 99   
   Looper.loop() line: 123   
   ActivityThread.main(String[]) line: 3683   
   Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]   
   Method.invoke(Object, Object...) line: 507   
   ZygoteInit$MethodAndArgsCaller.run() line: 839   
   ZygoteInit.main(String[]) line: 597   
   NativeStart.main(String[]) line: not available [native method]   

Исключение не выбрасывается, когда я прокомментирую строку setListAdapter(). Исключение также не бросается, когда данный массив пуст, и нет элементов списка, которые будут отображаться.

Когда я копирую файл simple_list_item_1.xml из SDK в свой собственный проект (res/layout), сообщение об ошибке изменяется из вышеупомянутого сообщения (File res/layout/simple_list_item_1.xml из идентификатора ресурса макета типа xml) на "ERROR/AndroidRuntime (2609): android.content.res.Resources $ NotFoundException: Файл res/layout/typing_filter.xml из xml-типа ресурса ресурса ID # 0x1090069 ". Эта ошибка более устойчива. Копирование typing_filter.xml в каталог моих собственных проектов ничего не меняет.

Я также задал этот вопрос на форуме anddev.org, но не получил ответа и теперь понял, что ставки ответов там невелики.

edit: Я только что увидел, что LogCat печатает более полезную стеклу, чем стандартное представление eclipse. Кажется, что есть исключение FileNotFound до того, как выбрано Resource $ NotFoundException:

06-25 19:41:40.844: ERROR/AndroidRuntime(2802): FATAL EXCEPTION: main
06-25 19:41:40.844: ERROR/AndroidRuntime(2802): android.content.res.Resources$NotFoundException: File res/layout/simple_list_item_1.xml from xml type layout resource ID #0x1090003
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:1916)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:1871)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.content.res.Resources.getLayout(Resources.java:731)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.LayoutInflater.inflate(LayoutInflater.java:318)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.AbsListView.obtainView(AbsListView.java:1430)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.ListView.onMeasure(ListView.java:1127)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.View.measure(View.java:8313)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.View.measure(View.java:8313)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.View.measure(View.java:8313)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.View.measure(View.java:8313)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.os.Looper.loop(Looper.java:123)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.app.ActivityThread.main(ActivityThread.java:3683)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at java.lang.reflect.Method.invokeNative(Native Method)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at java.lang.reflect.Method.invoke(Method.java:507)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at dalvik.system.NativeStart.main(Native Method)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802): Caused by: java.io.FileNotFoundException: res/layout/simple_list_item_1.xml
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.content.res.AssetManager.openXmlAssetNative(Native Method)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:486)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:1898)
06-25 19:41:40.844: ERROR/AndroidRuntime(2802):     ... 30 more

edit2: Спасибо @DArkO за ваш быстрый ответ. Я изменил res/layout/geokontakte_auflisten.xml, но получаю точно такую же ошибку.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <Spinner
    android:layout_height="wrap_content"
    android:drawSelectorOnTop="true"
    android:id="@+id/sp_sortierung"
    android:layout_width="wrap_content"
    android:entries="@array/Sortierung">
  </Spinner>
  <ListView
    android:layout_height="wrap_content"
    android:id="@android:id/list"
    android:layout_width="wrap_content"
    android:textFilterEnabled="true"
    android:cacheColorHint="@color/hintergrund">
  </ListView>
  <TextView
    android:id="@android:id/empty"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/txt_geokontakt_auflisten_keineDaten">
  </TextView>
</LinearLayout>

Я использую API версии 10 и эмулятор Android 2.3.3.

  • 0
    @Henizi: - У тебя есть решение? У меня такая же проблема на той же версии API и тот же эмулятор.
Теги:
android-layout

1 ответ

3

Активность списка может поддерживать только в том случае, если ваш идентификатор списка:

android:id="@android:id/list"

просто замените его здесь:

 <ListView
android:layout_height="wrap_content"
android:id="@+id/android:list"
android:layout_width="wrap_content"
android:textFilterEnabled="true"
android:cacheColorHint="@color/hintergrund">

См. Эту ссылку:

  • 0
    Я думаю (?) Это зависит от того, какую версию SDK вы используете ...
  • 2
    нет, это не так. у listActivity должен быть ресурс android для списка.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню