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();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值