RuntimeException: Nội dung của bạn phải có ListView có thuộc tính id là 'android.R.id.list'


87

Tôi nhận được một ngoại lệ về thời gian chạy

java.lang.RuntimeException: Nội dung của bạn phải có ListView có thuộc tính id là 'android.R.id.list'

Tôi không biết điều gì là sai.

@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
hãy chắc chắn để chọn một câu trả lời!
Phil

mDbHelper là gì? tôi đang trên cùng một thuyền và cố gắng để làm cho nó hoạt ListView của tôi ...
Nick Kahn

Câu trả lời:


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

Điều này sẽ giải quyết lỗi nếu bạn vẫn muốn sử dụng ListActivity.


48
Tôi đã phải sử dụng một định dạng khác, hãy thử android:id="@+id/android:list" nếu nó không hoạt động. Lớp của bạn vẫn phải mở rộng ListActivity và thay vì làm ListView yourListView = (ListView)findViewById(R.id.yourListView);điều này để khởi tạoListView yourListView = getListView();
CQM

@CQM ở đây có bất kỳ kiểu mẫu nào về hành vi này không?
Rui Carneiro

5
Đây là giải pháp, nếu OP quan tâm đến việc chọn một câu trả lời!
Kỳ

1
Tại sao điều này hoạt động? Tại sao tôi không thể gán bất kỳ giá trị nào khác cho android: id?
Vivek Pandey

1
@VivekPandey, bởi vì bạn đang mở rộng ListActivity mà đòi hỏi một ListView với android: id của danh sách, developer.android.com/reference/android/app/ListActivity.html , zgcharley dưới đây giải thích rõ ràng
mirageservo

52

Xóa cuộc gọi tới setContentView- bạn không cần nó trong ListActivity trừ khi bạn đang làm điều gì đó triệt để. Mã sẽ hoạt động mà không có nó.


4
Nhưng làm thế nào Activity biết được mẫu nào cần áp dụng nếu chúng ta không sử dụng setContentView ()?
ses

@ses, tôi tin rằng nó sẽ sử dụng mẫu ListView được xác định trước.
vươn

26

Một cách khác là, không mở rộng ListActivity. Chỉ cần mở rộng Activity, sau đó bạn có thể tạo chế độ xem danh sách của mình setContentView()và nhận chế độ xem danh sách theo findViewById(R.id.yourlistview).

Nếu bạn mở rộng từ ListActivity, sau đó không sử dụng setContentView(). Bạn cần có được chế độ xem danh sách mặc định được lưu trữ trong hoạt động danh sách bởi getListView().


10

Tôi đã gặp sự cố tương tự với thông báo lỗi mà bạn nhận được và tôi phát hiện ra nguyên nhân là do tôi đang mở rộng ListActivity thay vì chỉ Hoạt động (đó là những gì tôi nhận được khi chuyển mục đích lại mã từ một dự án khác;))


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

3

Tôi cũng phải đối mặt như thế này. Trong trường hợp của tôi (Có thể không liên quan đến trường hợp của bạn, chỉ cần chia sẻ với những người khác) trong lớp mainActivity.java yourClassName extends ListActivity(){...}thay đổi thànhyourClassName extends Activity(){...}


1
tôi thấy điều này thực sự hữu ích. cảm ơn Baras đã chia sẻ điều này.
Ayoub

bia tiếp theo là trên tôi.
Venkata Tata

1

Tôi cũng phải đối mặt với vấn đề này, tôi đã mở rộng lớp hoạt động của mình khỏi khả năng liệt kê, nhưng id của chế độ xem danh sách của tôi không bị mờ nên tôi đã thay đổi nó trở lại danh sách và bây giờ nó hoạt động tốt. Asim soroya

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.