为什么我的自定义布局文件无法识别?

时间:2012-02-07 04:00:58

标签: android android-layout android-listview android-xml

我在\ 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 });

我想创建一个自定义布局,每个联系人都有三个复选框。

为什么我的自定义布局不被视为有效?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2012年2月9日更新:

最后!

借助stackOverflowers和本文:http://www.vogella.de/articles/AndroidListView/article.html

我终于开始工作了;像往常一样,一旦你理解了几个概念,它就不那么难了。归结为使用这种代码,我乞求/借用/偷走和改编:

@覆盖 public void onCreate(Bundle savedInstanceState){     super.onCreate(savedInstanceState);

// 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 个答案:

答案 0 :(得分:7)

应该是

R.layout.contactlist

而不是

android.R.layout.contactlist

在使用系统资源时使用了android。

答案 1 :(得分:2)

使用你的应用程序生成的R文件(R.layout.contactlist)而不是使用android生成的R文件(android.R.layout.contactlist)。

答案 2 :(得分:1)

如果您正在使用Eclipse,我认为您应该尝试重新启动Eclipse。有时,当我添加新的xml或删除一些时,我的日食不够聪明,我不知道为什么。还有其他方法,如清洁项目(但你必须确保你的XML中没有错误,否则你的R将永远消失)。

不太确定,希望有所帮助

答案 3 :(得分:1)

我想你错过了setContentView(R.Layout.contactlist); ...你也需要在清单中指明这一点。

答案 4 :(得分:1)

有时候,即使用R.layout.zzz替换android.R.layout.zzz,Eclipse仍然会显示一条错误,表明您的客户布局无法识别。

我现在面对同样的问题。

我的解决方案是删除该文本并再次写入。 您也可以通过写“R”逐渐编写它。然后按Alt + Space,Eclipse将为您提供2个选项(android.R和R.),只需选择R.然后继续其余。