Seu conteúdo deve ter um ListView cujo atributo de ID seja 'android.R.id.list'


156

Eu criei um arquivo xml como este:

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

e uma atividade:

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

Como você vê, eu não fiz mais nada. Mas estou recebendo o erro:

Seu conteúdo deve ter um ListView cujo atributo de ID seja 'android.R.id.list'

Mesmo que eu tenha a android:id="@+id/list"linha no meu xml.

Qual é o problema?

Respostas:


345

Renomeie o ID do seu ListView assim,

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

Como você está usando ListActivityseu arquivo xml, deve especificar a palavra-chave android enquanto menciona um ID.

Se você precisar de um costume ListView, em vez de Estender a ListActivity, basta estender um Activitye deve ter o mesmo ID sem a palavra-chave android .


4
Fazer isso resolveu meu problema, obrigado. Mas eu me pergunto se você teria a gentileza de escrever algumas palavras explicativas sobre quando um ListView deve ter o ID "@android: id / list" e quando não há problema em ter um nome arbitrário. É porque eu gosto não apenas de corrigir o meu problema, mas também de entender por que a correção foi necessária.
RenniePet

4
Trabalho. Mas por que esses 'jogos' com id, dependendo da visão, implem?
ses

1
Quando eu adiciono @android, o Eclipse dizlist cannot be resolved or is not a field
user83039

1
mesmo problema, mostra o erro: Erro: Nenhum recurso encontrado que corresponda ao nome fornecido (no 'id' com o valor '@android: id / list_interestsent').

1
Obrigado por esta ótima resposta!
Brewology 08/09/16

23

Você deve ter uma lista de exibição em seu mainlist.xmlarquivo com o ID como@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"/>

isso deve resolver seu problema


8

Da maneira exata que eu corrigi isso com base nos comentários acima, pois não consegui fazê-lo funcionar no início:

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

preferências.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>

4

Herdar classe de atividade em vez de ListActivity, você pode resolver esse problema.

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mainlist);
    }
}

1
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>

0

Outra coisa que me afetou: se você possui vários dispositivos de teste, verifique se está fazendo alterações no layout usado pelo dispositivo. No meu caso, passei um tempo fazendo alterações em xmls no diretório "layout" até descobrir que meu telefone maior (que eu mudei para o meio do teste) estava usando xmls no diretório "layout-sw360dp". Grrr!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.