RuntimeException: Seu conteúdo deve ter um ListView cujo atributo id é 'android.R.id.list'


87

Estou recebendo uma exceção de tempo de execução

java.lang.RuntimeException: Seu conteúdo deve ter um ListView cujo atributo de id é 'android.R.id.list'

Eu não sei o que está errado.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newslist);
    mDbHelper.open();
    fillData();
}

private void fillData() {
    Bundle extras = getIntent().getExtras();
    long catID = extras.getLong("cat_id");
    Cursor c = mDbHelper.fetchNews(catID);
    startManagingCursor(c);

    String[] from = new String[] { DBHelper.KEY_TITLE };
    int[] to = new int[] { R.id.newslist_text };

    SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.text_newslist, c, from, to);
    setListAdapter(notes);
}

newslist.xml

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

text_newslist.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView 
        android:text="@+id/newslist_text"
        android:id="@+id/newslist_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">    
    </TextView>
</LinearLayout>

15
certifique-se de selecionar uma resposta!
Phil,

o que é mDbHelper? estou no mesmo barco e tentando fazê-lo funcionar no meu ListView ...
Nick Kahn

Respostas:


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

Isso resolverá o erro se você ainda quiser usar uma ListActivity.


48
Tive que usar um formato diferente, tente android:id="@+id/android:list" se não funcionar. Sua classe ainda deve estender ListActivity e, em vez de ListView yourListView = (ListView)findViewById(R.id.yourListView);fazer isso, para inicializarListView yourListView = getListView();
CQM

@CQM aqui existe algum tipo de padrão neste comportamento?
Rui Carneiro

5
Esta é a solução, se o OP se preocupou em selecionar uma resposta!
Estados de

1
Por que isso funciona? Por que não posso atribuir nenhum outro valor a android: id?
Vivek Pandey

1
@VivekPandey, porque você está estendendo a ListActivity, que requer uma ListView com um android: id of list, developer.android.com/reference/android/app/ListActivity.html , zgcharley abaixo explicou isso claramente
mirageservo

52

Remova a chamada para setContentView- você não precisa dela em uma ListActivity, a menos que esteja fazendo algo radical. O código deve funcionar sem ele.


4
Mas como Activity sabe qual modelo aplicar se não usamos setContentView ()?
ses

@ses, acredito que usará um modelo ListView predefinido.
esticado em

26

Outra maneira é não estender ListActivity. Apenas estende Activity, então você pode criar sua visualização de lista por setContentView()e obter a visualização de lista por findViewById(R.id.yourlistview).

Se você estende de ListActivity, não use setContentView(). Você precisa obter a exibição de lista padrão hospedada na atividade de lista por getListView().


10

Tive um problema semelhante com a mensagem de erro que você recebeu, e descobri que era porque eu estava estendendo ListActivity em vez de apenas Activity (isso é o que obtenho por re-propor o código de um projeto diferente;))


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

3

Eu também enfrento assim. No meu caso (talvez não seja relevante para o seu caso, apenas compartilhe com os outros) na classe, mainActivity.java yourClassName extends ListActivity(){...}mude parayourClassName extends Activity(){...}


1
Eu achei isso muito útil. obrigado Baras por compartilhar isso.
Ayoub

a próxima cerveja é por minha conta.
Venkata Tata

1

Eu também enfrentei esse problema, estava estendendo minha classe de atividade de lista de atividade, mas o id da minha visualização de lista não era padrão, mudei de volta para lista e agora está funcionando bem. Asim soroya

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.