这是一个非常奇怪的问题。我将直接发布代码:
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;
}
}
以上是我的自定义课程。以下是我的MainActivity:
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 接触@ 405206e8
我做错了什么?
答案 0 :(得分:1)
您需要覆盖toString()
方法才能正确表达您的课程。
public String toString(){
return this.name;
}
答案 1 :(得分:1)
我认为问题在于您的类有2个属性,因此您的适配器正在打印它们(名称和电话)。
一个选项可能是使用名称的数组的ArrayAdapter。或者编写自定义适配器。另一方面,自定义类的自定义toString也可以解决问题。