Почему мой файл пользовательского макета не распознается? - PullRequest
1 голос
/ 07 февраля 2012

Я создал файл в \ res \ layout с именем contactlist.xml

Но он не распознается в моем коде:

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,
        //android.R.layout.simple_list_item_1, mContacts, //if cre8 own layout, replace "simple_[etc]"
        //android.R.layout.simple_list_item_checked, mContacts, // or simple_list_item_multiple_choice
        //android.R.layout.simple_list_item_multiple_choice, mContacts,
        android.R.layout.contactlist, mContacts, // <- contact list ist xml-non-grata
        new String[] { ContactsContract.Contacts.DISPLAY_NAME },
        new int[] { android.R.id.text1 });

Я хочу создать собственный макет, который для каждогоУ контакта есть три флажка.

Почему мой пользовательский макет не принят как действительный?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Обновлено 02.09.2012:

Наконец-то!

С помощью stackOverflowers и этой статьи: http://www.vogella.de/articles/AndroidListView/article.html

Наконец-то яполучил это работает;как обычно, это не так сложно, как только вы придумываете пару идей.Это сводится к использованию такого рода кода, который я попросил / заимствовал / украл и адаптировал:

@ Переопределить public void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState);

// Return all contacts, ordered by name
String[] projection = new String[] { ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME }; 
mContacts = managedQuery(ContactsContract.Contacts.CONTENT_URI,
        projection, null, null, ContactsContract.Contacts.DISPLAY_NAME);

// Display all contacts in a ListView
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,
        R.layout.ondemandandautomatic_authorize, mContacts,
        new String[] { ContactsContract.Contacts.DISPLAY_NAME },
        new int[] { R.id.contactLabel });

setListAdapter(mAdapter);

} ​​

... и убедитесь, что «ondemandandautomatic_authorize» (или как вы называете файл макета) примерно так (незакончено, но вы поняли):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1" />

        <CheckBox
        android:id="@+id/checkBox2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2" />

        <CheckBox
        android:id="@+id/checkBox3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3" />

    <TextView
        android:id="@+id/contactLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="(replace this)"
        android:textSize="20px" >
    </TextView>

</LinearLayout>

... и что "R.id.contactLabel" заменено на "R.id".

Очевидно, что еще многое предстоит сделать, но большое препятствие было преодолено.

Ответы [ 5 ]

7 голосов
/ 07 февраля 2012

Это должно быть

R.layout.contactlist

, а не

android.R.layout.contactlist

Android используется при использовании системных ресурсов.

2 голосов
/ 07 февраля 2012

используйте R-файл, сгенерированный вашим приложением (R.layout.contactlist), а не R-файл, сгенерированный Android (android.R.layout.contactlist).

1 голос
/ 06 декабря 2014

Иногда, даже если вы замените android.R.layout.zzz на R.layout.zzz, Eclipse все равно покажет вам ошибку, что ваш макет клиента не распознан.

Я только что столкнулся с этой же проблемой сейчас.

Решением для меня было удалить этот текст и написать его снова. Вы также можете написать это постепенно, написав «Р.» затем, нажав Alt + Space, Eclipse предоставит вам 2 варианта (android.R и R.), просто выберите R. и продолжайте остальные.

1 голос
/ 07 февраля 2012

Я думаю, что вы пропустили setContentView (R.Layout.contactlist); ... также вам нужно указать это в вашем манифесте.

1 голос
/ 07 февраля 2012

Если вы используете Eclipse, я думаю, вам следует попробовать перезапустить Eclipse. Иногда, когда я добавляю новый xml или удаляю его, мое затмение недостаточно умное, я не знаю почему. Есть и другие способы, такие как Чистый проект (но вы должны убедиться, что в вашем XML нет ошибок, иначе ваш R исчезнет навсегда).

Не совсем уверен, надеюсь, это поможет

...