对于类型create,未定义setListAdapter

时间:2014-10-21 16:04:51

标签: java android xml

我正在尝试阅读手机上的联系人姓名,但是当涉及setListAdapter()时,我一直收到上述错误。

当我extends ListActivity而不是Activity时,没有错误,但应用程序强制关闭。

此外,我尝试通过在Create {扩展Activity内部创建另一个类来扩展ListActivitylistActivity,但没有显示任何内容。我在create.xml列表视图上显示。当用户点击在我的create.java文件

中创建的创建按钮时,会发生此main.xml

Create.java

import android.app.Activity;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ArrayAdapter;


public class Create extends Activity {

@Override
protected void onCreate(Bundle savedInstancesState)
{
    super.onCreate(savedInstancesState);
    setContentView(R.layout.create);

Cursor cursor = getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

    ArrayAdapter<String> list = new ArrayAdapter<String>(this, R.layout.create);


    while(cursor.moveToNext()) {

        String name = cursor.getString(cursor
                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        list.add(name);
    }

    setListAdapter(list);
    }
}   

这是create.xml

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

<TextView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_gravity="center"
    android:text="@string/create_button_title"
    android:textSize="24.5sp"
    android:layout_marginTop="24dip"/>

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginTop="22dip">

   <EditText
       android:id="@+id/contacts_label"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_toLeftOf="@+id/choose_contacts"
       android:hint="@string/choose_contacts" />

   <Button
       android:id="@+id/choose_contacts"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentRight="true"
       android:text="@string/contacts_button"
       />

   <ListView 
       android:id="@+id/contacts_list"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_marginTop="44dip"
       ></ListView>

   </RelativeLayout>

1 个答案:

答案 0 :(得分:0)

extends Activity ListView,您需要在[{1}}

中获取对onCreate()的引用
ListView lv = (ListView) findViewById(R.id.contacts_list);`

然后使用方法setAdapter()

lv.setAdapter(list);

setListAdapter()getListView()是扩展ListActivity时的便捷方法,在扩展任何其他类时无效。

至于为什么当你有extends ListActivity它没有工作时,很难说没有看到崩溃中的堆栈跟踪。

If you look at the docs`布局应该是

  

resource包含在实例化视图时使用的TextView的布局文件的资源ID。

它应该只包含 一个TextView。如果您想要其他View,则应创建自定义Adapter并覆盖getView()。这一点都在最顶层的文档中进行了解释。

您可以通过在Google上搜索类似“自定义适配器ListView Android”的内容,找到大量有关如何执行此操作的教程/示例。