android自定义桌面挂件widget用法(二)

本文介绍如何在Android中将复杂布局如ListView应用于桌面Widget,通过RemoteView、RemoteViewsService和RemoteViewsFactory实现数据适配。详细步骤包括在AppWidgetProvider子类中设置布局,RemoteViewService子类调用RemoteViewsFactory,以及RemoteViewsFactory子类执行数据绑定操作。
摘要由CSDN通过智能技术生成

在上篇博客中讲了widget最简单最基本的用法,然而实际项目中可能更多的使用复杂布局控件(如ListView,GridView等的控件)到widget中去,这就需要我们对这些控件做适配了。RemoteView有个setRemoteAdapter的方法可以绑定widget及其实现数据适配器的service类,就是我们后面要讲到的RemoteViewsService, 在这个RemoteViewsService的子类里面调用RemoteViewsFactory 的onGetViewFactory 方法返回一个RemoteViewsFactory 的自定义子类。

下面贴一张RemoteView的原理图,就能就其实现的思路一目了然了。
这里写图片描述
(图片转载)

从图中看不难理解,widget在复杂布局中通过RemoteView(远程控件)的服务类RemoteViewsService去调用RemoteViewFactory类的方法进行布局适配。

把步骤简单罗列下来就是:
1.AppWidgetProvider子类中,onupdate方法内部声明RemoteView对象并加载Widget的布局文件; 声明并实例化一个intent对象(把remoteViewService子类传给第二个参数),remoteView对象调用setRemoteAdapter方法绑定给remoteViewService对象。

2.RemoteViewService子类中,只需要调用一个RemoteViewsFactory的onGetViewFactory方法把remoteViewsFactory的子类回传。

3.RemoteViewsFactory子类中,干着原本ListView的BaseAdapter类似的活儿。这个类内部的oncreate方法一般进行参数的赋值;getCount方法和BaseAdapter类里面的getCount是一样的,返回Widget中ListView或者GirdView的item数目;getViewAt(int position)方法内执行item的赋值操作,其作用就类似而BaseAdapter类内部的getView方法。

接下来直接上代码,从代码来看整个流程的思路。

第一步:两个xml文件,(widget_layout.xml 和 widget_info.xml)

res/layout/widget_layout.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:orientation="vertical" 
    android:gravity="center_horizontal"
    android:background="@drawable/dialog_loading_bg">
    <ListView 
        android:id=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值