这个虽然不是源码,但是没区别,知识变量名字不一样而已


class MyAdapter extends ArrayAdapter<String>{

private List<String> list1;
public MyAdapter(Context context, int resource, List<String> objects) {
super(context, resource, objects);
this.list1 = objects;
Log.d("tag","构造函数:"+String.valueOf(list1.size()));
}

@Override
public int getCount() {
Log.d("tag","getCount:"+String.valueOf(list1.size()));
return super.getCount();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("tag","getView:"+String.valueOf(list1.size())+ Contact.getTime() );
return super.getView(position, convertView, parent);
}
}

public class Contact extends Activity {
private ListView lvContact;
private ArrayList<String> contactList = new ArrayList<String>();
private MyAdapter contactAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);

lvContact = (ListView) findViewById(R.id.lv_contact);

/********contactList这个时候是空的,并没有数据,也就说用空的contactList构建了一个adapter************/

contactAdapter = new MyAdapter(Contact.this,android.R.layout.simple_list_item_1,contactList);

/****************************listView set 了一个 空的adapter****************************************/

lvContact.setAdapter(contactAdapter);

myDebug("lvContact.setAdapter(contactAdapter);");

/***************这个方法才是向contactList里add数据**************************/

readContactByContentProvider();

}//onCreate执行完了


/*问题来了?

到这里onCreate就执行完了,但是有个问题,先用空的contactList构建了一个adapter,再用这个adapter去构建listView,然后再向contactList里add数据,这样listView能显示出数据来吗?答案是 能!


其实道理很简单,listView获取数据是getView负责的,而listView是在绘制的时候才去getView里取数据,而ListView绘制的时候onResum都执行完了,onCreate里的read.....()早就执行完了。list已经有数据了 。


可以把这个代码贴过去,运行下。onResum()打印完了,getView才开始执行

*/


@Override
protected void onStart() {
super.onStart();
myDebug("onStart..."+getTime());
}

@Override
protected void onResume() {
super.onResume();
myDebug("onResume..."+ getTime());
}

void readContactByContentProvider(){
myDebug("readContactByContentProvider();");
Cursor cursor= getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
while (cursor.moveToNext()){
String strName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String strPhoneNum = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactList.add(strName+":"+strPhoneNum);
myDebug(strName+strPhoneNum);
}
cursor.close();
}

更多相关文章

  1. 【Android学习】数据传递三种方式
  2. 实现基于注解(Annotation)的数据库框架(一)反射的基本了解
  3. 在活动中管理多个asynctask什么显示数据(Survey App)?
  4. Google Play服务API(位置服务)是否需要数据计划?
  5. 数据未显示在Listview中
  6. Android中获取网络天气数据
  7. 如何从firebase中获取唯一ID内的数据
  8. android studio 解析Excel数据格式导入poi-3.17.jar时的一系列报
  9. 将JSON数据传递到SQLite并检索它

随机推荐

  1. android警告——Buttons in button bars
  2. Getting Started with RabbitMQ on Andro
  3. Android使用Intent调用摄像头并获取照片
  4. GoBelieve Android SDK接入备忘
  5. ADB命令详解
  6. 在Windows系统中使用NDK编译Android二进
  7. Android框架结构了解
  8. Chronometer控件实现的Android计时器
  9. 【Android 基础】Android中全屏或者取消
  10. 仿Android疯狂猜图