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

时间:2013-03-14 19:31:42

标签: android database contacts custom-lists

我使用BaseAdapter创建了一个自定义ListView现在我想用电话簿中的联系人姓名和号码填充这个Listview ..我正在尝试这个..

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();
            }
        });
    }
}

我使用了不同的方法,但我无法使用联系人姓名或号码填充ListView。在这段代码中,我必须静态添加名称和号码......我在这里很混淆......小小的帮助将不胜感激。提前致谢。我是新手所以请在我身上轻松.. :)

2 个答案:

答案 0 :(得分:1)

如果你只是将一个项目列表放入ListView(看起来你正在做名字,数字等),你必须创建自己的自定义适配器。在您的活动或新课程中扩展BaseAdapter课程。然后,您必须覆盖getView()方法。这是每次新项目膨胀时调用的内容。

您在创建ArrayList时将BaseAdapter传递给getView()。适配器的TextViews方法是对逻辑进行编码以获取数据并将其作为列表项呈现的位置。您必须将新的XML文件定义为每个列表项的布局,其中包含您的{{1}}以及每个列表项中不同子项的内容,这就是您填充数据的内容。

如果你搜索“baseadapter”,那里有很多例子。这里的one给出了很好的介绍。

答案 1 :(得分:1)

嗯。你走在正确的轨道上,但我觉得你有点徘徊。

ListView是一个视图对象,而不是BaseAdapter。据我所知,您的代码不需要为ListView定制适配器。

您应该做的是将常规CursorAdapter绑定到ListView,使用CursorLoader从Contacts Provider加载所需的Contacts数据,然后将生成的Cursor移动到CursorAdapter。

您可以在此Android培训课程中找到执行此操作的说明: Loading Data in the Background

您在自定义ListView中想要从ListView本身获得什么?