Android 如何将联系人从电话填充到自定义列表视图?

Android 如何将联系人从电话填充到自定义列表视图?,android,database,contacts,custom-lists,Android,Database,Contacts,Custom Lists,我使用BaseAdapter创建了一个自定义列表视图,现在我想用通讯录中的联系人姓名和电话号码填充此列表视图。我正在尝试 import java.util.ArrayList; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.provider.ContactsContract; import android.view.View; impor

我使用
BaseAdapter
创建了一个自定义列表视图,现在我想用通讯录中的联系人姓名和电话号码填充此列表视图。我正在尝试

import java.util.ArrayList;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class Rabtaye extends Activity {

    ListView msgList;
    ArrayList<MessageDetails> details;
    AdapterView.AdapterContextMenuInfo info;

    Cursor cursor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);

        msgList = (ListView) findViewById(R.id.MessageList);
        details = new ArrayList<MessageDetails>();

        MessageDetails Detail = new MessageDetails();
        cursor = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
                null, null);
        startManagingCursor(cursor);

        String info[] = { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Phone._ID };
         for(String a:info){
         Detail.setName(a);
         }
         Detail.setNumber("0313");
         details.add(Detail);
//      int to[] = { R.id.name, R.id.number };
//      ListAdapter cursada = new SimpleCursorAdapter(this,
//              android.R.layout.simple_expandable_list_item_2, cursor, info,
//              to);
        msgList.setAdapter(new CustomAdapter(details, this));


        msgList.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                TextView s = (TextView) arg1.findViewById(R.id.name);
                String abc = s.getText().toString();
                Toast.makeText(Rabtaye.this, abc, Toast.LENGTH_LONG).show();
            }
        });
    }
}
import java.util.ArrayList;
导入android.app.Activity;
导入android.database.Cursor;
导入android.os.Bundle;
导入android.provider.contacts合同;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.SimpleCursorAdapter;
导入android.widget.TextView;
导入android.widget.Toast;
公共类Rabtaye扩展活动{
ListView-msgList;
ArrayList详细信息;
AdapterView.AdapterContextMenuInfo信息;
光标;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
msgList=(ListView)findViewById(R.id.MessageList);
详细信息=新的ArrayList();
MessageDetails Detail=新建MessageDetails();
cursor=getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,null,
空,空);
开始管理游标(游标);
字符串信息[]={ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME,
Contacts contract.CommonDataTypes.Phone.NUMBER,
contacts contract.commonDataTypes.Phone.\u ID};
for(字符串a:info){
详情.集合名称(a);
}
详细信息。设置编号(“0313”);
详细信息。添加(详细信息);
//int到[]={R.id.name,R.id.number};
//ListAdapter cursada=新的SimpleCursorAdapter(此,
//android.R.layout.simple_可扩展_列表_项目_2,光标,信息,
//至);
setAdapter(新的CustomAdapter(详细信息,本));
msgList.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
TextView s=(TextView)arg1.findViewById(R.id.name);
字符串abc=s.getText().toString();
Toast.makeText(Rabtaye.this,abc,Toast.LENGTH_LONG.show();
}
});
}
}

我使用了不同的方法,但我无法用联系人姓名或号码填充ListView。在这段代码中,我必须静态地添加名称和数字…我在这里很困惑…如果没有什么帮助,我们将不胜感激。提前谢谢。我是新手,所以请对我放轻松点。:)

如果您要将多个项目列表放入列表视图中(看起来您正在进行名称、编号等操作),则必须创建自己的自定义适配器。在活动中或在新类中扩展类。然后必须重写
getView()
方法。这就是所谓的每次一个新的项目得到膨胀

创建
ArrayList
时,将其传递到
BaseAdapter
中。适配器的
getView()
方法用于对逻辑进行编码,以获取数据并将其作为列表项显示。您必须为每个列表项定义一个新的XML文件作为布局,该列表项包含您的
textView
以及每个列表项中不同子项的其他内容,这就是您用数据填充的内容


如果您搜索“baseadapter”,有很多例子。这是一个非常好的介绍。

嗯。你的思路是对的,但我认为你有点走神了

ListView是一个视图对象,而不是BaseAdapter。从代码中我可以看出,ListView不需要自定义适配器

您应该做的是将常规游标适配器绑定到ListView,使用游标加载程序从联系人提供程序加载所需的联系人数据,然后将生成的游标移动到游标适配器

您可以在本Android培训课程中找到执行此操作的说明:


您希望自定义ListView中有什么内容是ListView本身无法提供的?

问题是,我想用所有联系人填充整个ListView,并在其中设置复选框。我尝试了默认列表视图,但它不显示数字。这就是我切换到自定义Listview的原因。