我使用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。在这段代码中,我必须静态添加名称和号码......我在这里很混淆......小小的帮助将不胜感激。提前致谢。我是新手所以请在我身上轻松.. :)
答案 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本身获得什么?