<< 如何用jQuery做浏览器类型判断和分辨率判断 | 首页 | 应用CSS3 Media Queries 使网站移动化单列排版 >>

如何刷新Android的ListView的UI界面

一般地,正确的自动更新UI界面的方式是通过自动更新Cursor,而实现自动更新Cursor,则是在创建Cursor和和被请求处理之前先调用 Cursor#setNotificationUri,然后在更新Cursor的Uri namespace变化的时候调用ContentResolver#notifyChange。这样就实现了自动更新UI界面,而这些全部都可以在ContentProvider完成。

For example, suppose you were creating a simple mail application and you wanted to update when new mail arrived but also provide various views on the mail. I'd have some basic Uri's defined.

 

content://org.example/all_mail

content://org.example/labels

content://org.example/messages

Now, say I wanted to get a cursor that gave me all mail and be updated when new mail arrives:

 

Cursor c;

//code to get data

c.setNotificationUri(getContentResolver(), Uri.parse("content://org.example/all_mail");

Now new mail arrives so I notify:

 

//Do stuff to store in database

getContentResolver().notifyChange(Uri.parse("content://org.example/all_mail", null);

I should also notify all the Cursors that selected for labels this new message met

 

for(String label : message.getLabels() {

  getContentResolver().notifyChange(Uri.parse("content://org.example/lables/" + label, null);

}

And also, maybe a cursor is viewing that one specific message so notify them as well:

 

getContentResolver().notifyChange(Uri.parse("content://org.example/messages/" + message.getMessageId(), null);

The getContentResolver() calls happen where the data is accessed. So if it's in a Service or ContentProvider that is where you setNotificationUri and notifyChange. You should not be doing that from where the data is accessed, e.g., an Activity.

AlarmProvider.java

标签 : ,



发表评论 发送引用通报