Android学习笔记--《第一行代码Android》273页代码解密
这个虽然不是源码,但是没区别,知识变量名字不一样而已
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();
}
更多相关文章
- 【Android学习】数据传递三种方式
- 实现基于注解(Annotation)的数据库框架(一)反射的基本了解
- 在活动中管理多个asynctask什么显示数据(Survey App)?
- Google Play服务API(位置服务)是否需要数据计划?
- 数据未显示在Listview中
- Android中获取网络天气数据
- 如何从firebase中获取唯一ID内的数据
- android studio 解析Excel数据格式导入poi-3.17.jar时的一系列报
- 将JSON数据传递到SQLite并检索它