2014.10.15总结(ListView)
今天学习ContentResolver的时候又用到了ListView这个控件,好多东西又忘了,看了看书,才想起来了
数据是无法直接传递给ListView的,需要通过适配器来完成,可用ArrayAdapter或自定义适配器来继承ArrayAdapter来构建适配器
private List fruitlist=new ArrayList();
FruitAdapter adapter=new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitlist);
ListView listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter); FruitAdapter是自定义的适配器,继承ArrayAdapter,里面的参数分别是1.上下文,2.需要传入的布局,3.要传入的数据(可以直接传入,通常是后续传入,这里只是写上List类的名字)
然后通过listView.setAdapter(adapter);方法,把构建好的适配器对象传递进去,这样ListView和数据之间就建立了联系。
今天写的ContentResolver,通过内容提供器访问外部接口
想要访问内容提供器中共享的数据,需要借助ContentResolver类,可以通过Context中的getContentResolver()方法来获取该类的实例。
ContentResolver提供了一系列的方法来对数据进行CRUD操作,但又有不同,传的参数不是表名,而是用Uri参数代替,Uri由两部分组成,权限(authority)和路径(path),权限是用于区分不同的程序,路径是用于区分同一应用程序中的不同的表。权限一般采用的是包名+provider,路径就是表的名称。
例如内容URI最标准的格式为:content://com.example.app.provider/table1
很显然,URI很清楚的表达了我们要访问哪个程序的哪张表,得到URI字符串之后,还需要解析成Uri对象,调用Uri.parse()方法。
Uri uri=Uri.parse("content://com.example.app.provider/table1");
查询:
之后就可以使用Uri对象来查询table中的数据了Cursor cursor=getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
后面几个是约束条件,用的时候查一下就好了
ContentValues values=new ContentValues();
values.put("colum1","text");
增加:
getContentResolver().insert(uri,values);
更新:
getContentResolver().update(uri,values,"colum1=?",new String[]{"text"});
删除:
getContentResolver().delete(uri,values,"colum1=?",new String[]{"text"});
例子:
读取联系人
public class MainActivity extends Activity {ListView contactsView;ArrayAdapter adapter;List contactsList=new ArrayList();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);contactsView=(ListView) findViewById(R.id.contact_view);adapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1,contactsList);contactsView.setAdapter(adapter);readContacts();}private void readContacts() {Cursor cursor=null;try {cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);while (cursor.moveToNext()) {String displayName=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));String number=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));contactsList.add(displayName+"\n"+number);}} catch (Exception e) {e.printStackTrace();}finally{if(cursor!=null){cursor.close();}}}
}
readContacts()上面的就是在本文最上面写的,
Uri没用是因为ContactsContract.CommonDataKinds.Phone类已经做好了封装,提供CONTENT_URI常量,它就是Uri.prase()方法解析出来的结果,然后通过遍历,把姓名和手机号取出来,姓名对应的常量是ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,手机号对应的常量是ContactsContract.CommonDataKinds.Phone.NUMBER,之后添加到LiewView对象里面,最后一定要记得吧Cursor对象关闭
之后在AndroidManifest.xml文件中添加权限即可
以上是采用现有的内容提供器来读取和操作相应应用程序中的数据
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
