【发布时间】:2013-12-20 12:57:39
【问题描述】:
我想从服务更新小部件中的 ListView。为此,我的服务中有此代码:
Intent intent = new Intent(ctx, ListProvider.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(widgetId, R.id.listViewWidget, intent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
我确定服务正在运行并且代码已执行,但在主屏幕上的小部件中没有任何反应。我的 ListProvider 如下所示:
public class ListProvider implements RemoteViewsFactory
{
public ListProvider(Context context, Intent intent)
{
Log.d("ME", "new ListProvider");
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
populateListItem();
}
private void populateListItem()
{
for (int i = 0; i < 10; i++)
{
ListItem listItem = new ListItem();
listItem.heading = "Heading" + i;
listItem.content = i + " This is the content";
listItemList.add(listItem);
}
}
@Override
public int getCount()
{
return listItemList.size();
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public RemoteViews getViewAt(int position)
{
final RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.list_row);
ListItem listItem = listItemList.get(position);
remoteView.setTextViewText(R.id.heading, listItem.heading);
remoteView.setTextViewText(R.id.content, listItem.content);
return remoteView;
}
@Override
public RemoteViews getLoadingView()
{
return null;
}
@Override
public int getViewTypeCount()
{
return 1;
}
@Override
public boolean hasStableIds()
{
return true;
}
// Some other override methods
public class ListItem
{
public String heading,content;
}
}
这是我的 AppWidgetProvider:
public class MyWidgetProvider extends AppWidgetProvider
{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
但我认为 ListProvider 永远不会被调用。不显示日志消息,并且在主屏幕上没有任何反应。任何想法为什么?
【问题讨论】:
-
如何将 Intent 从服务发送到您的小部件?
-
我认为如果我将 ListView 更改为
RemoteView并使用updateAppWidget调用小部件更新功能就足够了。这还不够吗?我不经常使用小部件。
标签: android android-listview android-widget