Android 主屏幕小部件 ListView ViewHolder 模式
Android Homescreen Widget ListView ViewHolder Pattern
我有一个主屏幕小部件,可以完全加载自定义视图列表 运行。数据由自定义后端提供,当我通过自定义小部件按钮刷新小部件列表时,新项目会正确反映在小部件列表中。
我注意到的一件事是主屏幕小部件缺少对小部件(视图)的支持。我注意到缺少的一个方面是关于 ListViews,因为我无法实现 ViewHolder 模式。主要问题是 getViewAt() 方法仅提供位置作为参数,这与常规 ListAdapter 不同,它还在其 getView() 方法中提供 convertView。 RemoveViewFactory class 的示例如下所示:
class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private static final int mCount = 10;
private List<WidgetItem> mWidgetItems = new ArrayList<WidgetItem>();
private Context mContext;
private int mAppWidgetId;
public StackRemoteViewsFactory(Context context, Intent intent) {
mContext = context;
mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
...
public RemoteViews getViewAt(int position) {
// Construct a remote views item based on the app widget item XML file,
// and set the text based on the position.
RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);
rv.setTextViewText(R.id.widget_item, mWidgetItems.get(position).text);
...
// Return the remote views object.
return rv;
}
}
有没有办法用主屏幕小部件和 RemoteViews 实现这种模式?
没有,原因很简单,您没有任何意见。主屏幕有意见。 ViewHolder
背后的要点是缓存 findViewById()
查找,这些查找发生在主屏幕的进程中,而不是你的。
我有一个主屏幕小部件,可以完全加载自定义视图列表 运行。数据由自定义后端提供,当我通过自定义小部件按钮刷新小部件列表时,新项目会正确反映在小部件列表中。
我注意到的一件事是主屏幕小部件缺少对小部件(视图)的支持。我注意到缺少的一个方面是关于 ListViews,因为我无法实现 ViewHolder 模式。主要问题是 getViewAt() 方法仅提供位置作为参数,这与常规 ListAdapter 不同,它还在其 getView() 方法中提供 convertView。 RemoveViewFactory class 的示例如下所示:
class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private static final int mCount = 10;
private List<WidgetItem> mWidgetItems = new ArrayList<WidgetItem>();
private Context mContext;
private int mAppWidgetId;
public StackRemoteViewsFactory(Context context, Intent intent) {
mContext = context;
mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
...
public RemoteViews getViewAt(int position) {
// Construct a remote views item based on the app widget item XML file,
// and set the text based on the position.
RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);
rv.setTextViewText(R.id.widget_item, mWidgetItems.get(position).text);
...
// Return the remote views object.
return rv;
}
}
有没有办法用主屏幕小部件和 RemoteViews 实现这种模式?
没有,原因很简单,您没有任何意见。主屏幕有意见。 ViewHolder
背后的要点是缓存 findViewById()
查找,这些查找发生在主屏幕的进程中,而不是你的。