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


156

ฉันได้สร้างไฟล์ 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="@+id/list" >
</ListView>

และกิจกรรม:

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

อย่างที่คุณเห็นฉันไม่ได้ทำอะไรเลย แต่ฉันได้รับข้อผิดพลาด:

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

แม้ว่าฉันจะมีandroid:id="@+id/list"บรรทัดใน xml ของฉัน

อะไรคือปัญหา?

คำตอบ:


345

เปลี่ยนชื่อ id ของ ListView ของคุณเช่นนี้

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

เนื่องจากคุณกำลังใช้ListActivityไฟล์ xml ของคุณจะต้องระบุคำหลักandroidในขณะที่กล่าวถึง ID

หากคุณต้องการที่กำหนดเองListViewแล้วแทนการต่อListActivityคุณมีเพียงการขยายActivityและควรจะมีรหัสเดียวกันโดยไม่ต้องคำหลักหุ่นยนต์


4
การทำเช่นนี้ช่วยแก้ไขปัญหาของฉันได้ขอบคุณ แต่ฉันสงสัยว่าคุณจะเป็นคนใจดีที่จะเขียนคำอธิบายสองสามคำเกี่ยวกับเวลาที่ ListView ต้องมี ID "@android: id / list" และเมื่อใดที่ตกลงเพื่อให้มีชื่อโดยพลการ มันเป็นเพราะฉันชอบที่จะไม่เพียง แต่แก้ไขปัญหาของฉัน แต่ยังเข้าใจว่าทำไมต้องมีการแก้ไข
RenniePet

4
โรงงาน แต่ทำไม 'เกม' ที่มีรหัสขึ้นอยู่กับมุมมอง
ses

1
เมื่อฉันเพิ่ม@androidEclipse พูดว่าlist cannot be resolved or is not a field
user83039

1
ปัญหาเดียวกันจะแสดงข้อผิดพลาด: ข้อผิดพลาด: ไม่พบทรัพยากรที่ตรงกับชื่อที่กำหนด (ที่ 'id' พร้อมค่า '@android: id / list_interestsent')

1
ขอบคุณสำหรับคำตอบที่ยอดเยี่ยมนี้!
เบียร์

23

คุณควรมี listview หนึ่งmainlist.xmlไฟล์ในไฟล์ที่มี id เป็น@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"/>

สิ่งนี้จะช่วยแก้ปัญหาของคุณได้


8

วิธีที่แน่นอนฉันแก้ไขสิ่งนี้ตามข้อเสนอแนะด้านบนเนื่องจากฉันไม่สามารถใช้งานได้ในตอนแรก:

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>

4

รับคลาสกิจกรรมแทนListActivityคุณสามารถแก้ไขปัญหานี้ได้

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

อีกสิ่งหนึ่งที่ส่งผลกระทบต่อฉัน: หากคุณมีอุปกรณ์ทดสอบหลายตัวตรวจสอบให้แน่ใจว่าคุณได้ทำการเปลี่ยนแปลงเค้าโครงที่อุปกรณ์ใช้ ในกรณีของฉันฉันใช้เวลาสักครู่ในการเปลี่ยนแปลง xml ในไดเรกทอรี "layout" จนกระทั่งฉันพบว่าโทรศัพท์ขนาดใหญ่ของฉัน (ซึ่งฉันเปลี่ยนไปครึ่งทางผ่านการทดสอบ) ใช้ xml ในไดเรกทอรี "layout-sw360dp" ฮึ่ม!

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