2013-03-14 65 views
1

我创建了一个自定义的ListView使用BaseAdapter现在我要填充此列表视图与联系人姓名和电话号码从手机book..I正尝试这个..如何将联系人从电话填充到自定义列表视图?

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。在这个代码中,我必须静态添加名称和编号......我很困惑这里..帮助将不胜感激。提前致谢。我是新手所以请在我容易.. :)

回答

1

嗯。你在正确的轨道上,但我认为你有点徘徊。

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

你应该做的是将常规CursorAdapter绑定到ListView,使用CursorLoader从Contacts Provider加载你想要的联系人数据,然后将生成的光标移动到CursorAdapter。

您可以在此Android培训课程中找到相关说明: Loading Data in the Background

你想在你的自定义ListView,你不能从ListView本身得到什么?

+0

事情是,我想填充所有联系人的整个列表视图,并与他们的复选框。我试过默认的ListView,但它不显示Numbers。这就是为什么我切换到自定义列表视图。 – 2013-03-15 17:03:00

1

如果你不仅仅是一个项目列表放入ListView(它看起来像你在做名字,数字等),你有创建您自己的自定义适配器。无论是在你的活动中,还是在一个新班级中,都可以扩展BaseAdapter类。那么你必须重写getView()方法。这就是每当新物品充气时所谓的。

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

如果您搜索“baseadapter”,那么就有一堆例子。这是one,给出了一个相当不错的介绍。

相关问题