2014.10.15总结(ListView)

来源:互联网 发布:对数据库的认识 编辑:程序博客网 时间:2024/05/20 22:28

今天学习ContentResolver的时候又用到了ListView这个控件,好多东西又忘了,看了看书,才想起来了

数据是无法直接传递给ListView的,需要通过适配器来完成,可用ArrayAdapter或自定义适配器来继承ArrayAdapter来构建适配器

private List<Fruit> fruitlist=new ArrayList<Fruit>();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<String> adapter;List<String> contactsList=new ArrayList<String>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        contactsView=(ListView) findViewById(R.id.contact_view);        adapter=new ArrayAdapter<String>(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文件中添加权限即可

 <uses-permission android:name="android.permission.READ_CONTACTS"/>

以上是采用现有的内容提供器来读取和操作相应应用程序中的数据










0 0
原创粉丝点击