Treść musi mieć ListView, którego atrybut id to „android.R.id.list”

156

Utworzyłem taki plik xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/list" >
</ListView>

i aktywność:

public class ExampleActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainlist);
    }
}

Jak widzisz, nic innego nie zrobiłem. Ale otrzymuję błąd:

Treść musi mieć ListView, którego atrybut id to „android.R.id.list”

Mimo że mam android:id="@+id/list"wiersz w moim xml.

Jaki jest problem?

Isa Kuru
źródło

Odpowiedzi:

345

Zmień nazwę swojego ListView w ten sposób,

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

Ponieważ używasz ListActivitypliku xml, musisz podać słowo kluczowe android , wspominając o identyfikatorze.

Jeśli potrzebujesz niestandardowego, ListViewzamiast rozszerzania a ListActivity, musisz po prostu rozszerzyć Activityi powinien mieć ten sam identyfikator bez słowa kluczowego android .

Andro Selva
źródło
4
To rozwiązało mój problem, dzięki. Ale zastanawiam się, czy byłbyś tak uprzejmy, aby napisać kilka słów wyjaśnienia, kiedy ListView musi mieć identyfikator „@android: id / list”, a kiedy jest w porządku, aby miał dowolną nazwę. To dlatego, że lubię nie tylko naprawić mój problem, ale także zrozumieć, dlaczego potrzebna była poprawka.
RenniePet
4
Pracuje. Ale dlaczego to „gry” z id w zależności od widoku impl?
sesja
1
Kiedy dodam @android, Eclipse mówilist cannot be resolved or is not a field
user83039
1
ten sam problem pokazuje błąd: Błąd: Nie znaleziono zasobu pasującego do podanej nazwy (w „id” z wartością „@android: id / list_interestsent”).
1
Dzięki za tę świetną odpowiedź!
Brewology
23

Powinieneś mieć jeden widok listy w swoim mainlist.xmlpliku o identyfikatorze jako@android:id/list

<ListView
    android:id="@android:id/list"
    android:layout_height="wrap_content"
    android:layout_height="fill_parent"/>
Praveenkumar
źródło
15
<ListView android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

to powinno rozwiązać twój problem

Aamirkhan
źródło
8

Dokładny sposób, w jaki naprawiłem to na podstawie powyższych opinii, ponieważ na początku nie mogłem go uruchomić:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/list"
>
</ListView>

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addPreferencesFromResource(R.xml.preferences);

preferencje.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
    android:key="upgradecategory"
    android:title="Upgrade" >
    <Preference
        android:key="download"
        android:title="Get OnCall Pager Pro"
        android:summary="Touch to download the Pro Version!" />
</PreferenceCategory>
</PreferenceScreen>
Kevin
źródło
4

Dziedzicz klasę działania zamiast ListActivity , możesz rozwiązać ten problem.

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mainlist);
    }
}
Vicky
źródło
1
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>
Makvin
źródło
0

Jeszcze jedna rzecz, która mnie dotknęła: jeśli masz wiele urządzeń testowych, upewnij się, że wprowadzasz zmiany w układzie używanym przez urządzenie. W moim przypadku spędziłem trochę czasu na wprowadzaniu zmian w plikach XML w katalogu „layout”, aż odkryłem, że mój większy telefon (na który przełączyłem się w połowie testów) używa plików XML w katalogu „layout-sw360dp”. Grrr!

RudyF
źródło