2012-06-15 13 views
142

Stworzyłem plik 'android.R.id.list' xml tak:Twoja treść musi mieć ListView, którego atrybut id jest

<?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> 

oraz działalność:

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, nie zrobiłem nic więcej. Ale I'am uzyskiwanie błąd:

Your content must have a ListView whose id attribute is 'android.R.id.list'

chociaż mam linię w moim xml android:id="@+id/list".

Na czym polega problem?

Odpowiedz

311

Zmień nazwę swojego identyfikatora ListView jak ta,

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

Ponieważ używasz ListActivity plik XML musi określić słowa kluczowego android natomiast wspomnieć do ID.

Jeśli potrzebujesz niestandardowego ListView wtedy zamiast przedłużenia ListActivity, trzeba po prostu rozszerzyć Activity i powinny mieć ten sam identyfikator bez słowa kluczowego android.

+4

Dzięki temu rozwiązałem problem, dzięki. Zastanawiam się jednak, czy byłbyś tak uprzejmy, aby napisać kilka słów wyjaśnienia, kiedy ListView musi mieć ID "@android: id/list" i kiedy jest w porządku, aby mieć dowolną nazwę. To dlatego, że lubię nie tylko naprawiać mój problem, ale także rozumieć, dlaczego poprawka była potrzebna. – RenniePet

+1

Nie działa. Ten sam błąd. – Xeos

+3

Działa. Ale dlaczego te "gry" z identyfikatorem w zależności od widoku implikują? – ses

23

Trzeba jeden ListView w pliku mainlist.xml z id jako @android:id/list

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

to powinno rozwiązać twój problem

6

Dokładny Naprawiłem to w oparciu o informacje zwrotne powyżej ponieważ nie mogłem na początek:

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); 

preferences.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> 
3

Dziedziczenie aktywny Klasa zamiast ListActivity można rozwiązać ten problem.

public class ExampleActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.mainlist); 
    } 
} 
0

Jeszcze jedna rzecz, która na mnie wpłynęł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 chwilę wprowadzając zmiany do xmls w katalogu "layout", aż odkryłem, że mój większy telefon (który przełączyłem na połowę testów) używał xmls w katalogu "layout-sw360dp". Grrr!

0
<ListView android:id="@id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:drawSelectorOnTop="false" 
     android:scrollbars="vertical"/> 
Powiązane problemy