0

这是一个非常奇怪的问题。我直接贴代码:

package com.asim.contactspull;

    public class Contact
    {
    private String name;
    private String number;

    public Contact(String sname, String snumber)
    {
        this.name = sname;
        this.number = snumber;
    }
    }

以上是我的自定义类。以下是我的主要活动:

package com.asim.contactspull;

public class MainActivity extends Activity
{
    ArrayList<Contact> contactList;
    ListView contacts;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        contactList = new ArrayList<Contact>();

        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,null, null);
        while (phones.moveToNext())
        {
            Contact c = new Contact(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)), phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
            Log.d("Contact: ", "" + c.toString());
            contactList.add(c);
        }
        phones.close();

        contacts = (ListView) findViewById(R.id.contacts);
        ArrayAdapter<Contact> aa = new ArrayAdapter<Contact>(this, android.R.layout.simple_list_item_1, contactList);
        contacts.setAdapter(aa);
    }
}

当我运行上面的代码时,我在我的 ListView 中得到这样的条目:

com.asim.contactspull Contact@405206e8

我究竟做错了什么?

4

2 回答 2

1

你需要重写toString()方法来获得你的类的正确表示。

像这样:

public String toString(){
   return this.name;
}
于 2012-11-01T07:41:17.543 回答
1

我认为问题在于您的类有 2 个属性,因此您的适配器正在打印它们(姓名和电话)。

一种选择可能是仅使用名称的数组的 ArrayAdapter。或者编写一个自定义适配器。另一方面,自定义类上的自定义 toString 也可以解决问题。

于 2012-11-01T07:42:07.937 回答