1.修改布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.chuny.ch10listview.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listview"></ListView> </LinearLayout>
2.修改Java文件:
3.运行效果:
4.介绍三种适配器:
(1)读取手机通讯录的信息的方法:读取数据
private List<String> getContactName(){ List<String> contacts=new ArrayList<>(); //List<String>指定List的类型只能是String //定义一个内容解析器,就是凡是读到手机系统资源的,都需要一个内容解析器 ContentResolver cr=getContentResolver(); //获取手机通信录的地址 Cursor cursor=cr.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null); //定义一个游标 //循环读取通讯录里边的联系人 if(cursor.moveToFirst()){ do{ String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); //游标类型转化为数据类型 //读取手机通信录中的联系人姓名 contacts.add(name); }while(cursor.moveToNext()); } cursor.close(); //关闭游标,游标类似指针,读取数据库时 return contacts; }
定义适配器:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=(ListView)findViewById(R.id.listview); // ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,dataSource); //listView.setAdapter(adapter); ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,getContactName()); listView.setAdapter(adapter); }
报错:
修改权限:
运行效果:
(2)