RuntimeException: เนื้อหาของคุณต้องมี ListView ซึ่งมีแอตทริบิวต์ id คือ 'android.R.id.list'


87

ฉันได้รับข้อยกเว้นเวลาทำงาน

java.lang.RuntimeException: เนื้อหาของคุณต้องมี ListView ซึ่งมีแอตทริบิวต์ id คือ 'android.R.id.list'

ไม่รู้ผิดชอบชั่วดี

@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
อย่าลืมเลือกคำตอบ!
ฟิลิป

mDbHelper คืออะไร? ฉันอยู่บนเรือลำเดียวกันและพยายามทำให้มันทำงาน ListView ของฉัน ...
Nick Kahn

คำตอบ:


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

วิธีนี้จะแก้ไขข้อผิดพลาดหากคุณยังต้องการใช้ ListActivity


49
ฉันต้องใช้รูปแบบอื่นลองandroid:id="@+id/android:list" ถ้ามันไม่ได้ผล ชั้นเรียนของคุณยังต้องขยาย ListActivity และแทนที่จะทำListView yourListView = (ListView)findViewById(R.id.yourListView);สิ่งนี้เพื่อเริ่มต้นListView yourListView = getListView();
CQM

@CQM นี่คือรูปแบบใด ๆ เกี่ยวกับพฤติกรรมนี้?
Rui Carneiro

5
นี่คือทางออกหาก OP เคยใส่ใจที่จะเลือกคำตอบ!
สหรัฐอเมริกา

1
ทำไมถึงได้ผล? เหตุใดฉันจึงไม่สามารถกำหนดค่าอื่น ๆ ให้กับ android: id ได้
Vivek Pandey

1
@VivekPandey เพราะคุณกำลังขยาย ListActivity ซึ่งต้องใช้ ListView กับ android: id of list, developer.android.com/reference/android/app/ListActivity.html , zgcharley ด้านล่างอธิบายไว้ชัดเจน
mirageservo

52

ลบการโทรออกsetContentView- คุณไม่จำเป็นต้องใช้ใน ListActivity เว้นแต่คุณจะทำอะไรที่รุนแรง รหัสควรใช้งานได้หากไม่มีรหัสนี้


4
แต่กิจกรรมจะรู้ได้อย่างไรว่าจะใช้เทมเพลตใดหากเราไม่ใช้ setContentView ()
ses

@s ฉันเชื่อว่ามันจะใช้เทมเพลต ListView ที่กำหนดไว้ล่วงหน้า
เครน

26

ListActivityอีกวิธีหนึ่งคือไม่ขยาย เพียงแค่ขยายActivityแล้วคุณสามารถสร้างมุมมองรายการของคุณโดยการและได้รับมุมมองรายการโดยsetContentView()findViewById(R.id.yourlistview)

ถ้าคุณยื่นออกมาจากนั้นก็ไม่ได้ใช้ListActivity คุณจำเป็นต้องได้รับมุมมองรายการเริ่มต้นเจ้าภาพในกิจกรรมรายการโดยsetContentView()getListView()


10

ฉันมีปัญหาคล้ายกันกับข้อความแสดงข้อผิดพลาดที่คุณได้รับและฉันพบว่าเป็นเพราะฉันกำลังขยาย ListActivity แทนที่จะเป็นเพียงกิจกรรม (นั่นคือสิ่งที่ฉันได้รับจากการส่งรหัสซ้ำจากโครงการอื่น;))


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

3

ฉันก็หน้าแบบนี้เหมือนกัน ในกรณีของฉัน (อาจไม่เกี่ยวข้องกับกรณีของคุณเพียงแค่แบ่งปันให้ผู้อื่น) ในชั้นเรียนmainActivity.java yourClassName extends ListActivity(){...}เปลี่ยนเป็นyourClassName extends Activity(){...}


1
ฉันพบว่าสิ่งนี้มีประโยชน์จริงๆ ขอบคุณ Baras สำหรับการแบ่งปันสิ่งนี้
Ayyoub

เบียร์ต่อไปอยู่กับฉัน
Venkata KC Tata

1

ฉันประสบปัญหานี้เช่นกันฉันกำลังขยายคลาสกิจกรรมของฉันจาก listactivity แต่ id ของมุมมองรายการของฉันไม่เป็นค่าเริ่มต้นฉันเปลี่ยนกลับเป็นรายการและตอนนี้มันทำงานได้ดี อาซิมโซโรยะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.