我有一个小部件,它的设置,以便当我点击它时,它会在活动中打开一些设置.
views.setOnClickPendingIntent(R.id.btnActivate, pendingIntent);
Run Code Online (Sandbox Code Playgroud)
这会为应用程序配置一些设置.我想要实现的是让窗口小部件更新其视图以反映活动I启动关闭时更改的设置.使用更新间隔或任何其他类型的轮询不适合此.
我在这里看到了几个地方,在android文档中使用了这段代码:
appWidgetManager.updateAppWidget(mAppWidgetId, views);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何获得mAppWidgetId值.我尝试按照http://developer.android.com/guide/topics/appwidgets/index.html中的小部件配置活动示例,但在以下代码中,
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
Run Code Online (Sandbox Code Playgroud)
extras总是为null,所以我永远不会得到AppWidgetID.
好的,现在我只是漫无边际.你觉得我能做什么?
当我从某个活动更新窗口小部件时,列表远程视图没有更新(我的意思是刷新自己).它出现在应用程序小部件的更新(日志显示)上.但是没有进入列表视图的适配器以使用新数据对其进行充气.
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
Log.e("called", "onupdate");
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.widget_lay);
views.setTextViewText(R.id.textView1,
"Floating Text will be displayed here .. Daily Thoughts");
Intent intent = new Intent(context, RemoteServiceEmin.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
views.setRemoteAdapter(R.id.gridview, intent);
// inflating list remote view
Intent intentlist = new Intent(context, ListInflater.class);
intentlist.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(R.id.listview, intentlist);
// setting onclick on gridview
Intent itemClickIntent …Run Code Online (Sandbox Code Playgroud) 我通过以下android文档:"应用程序小部件与集合"来创建一个显示文本列表的小部件.一切正常,它的工作就像我希望它的工作一样.
现在,而不是显示文本列表,我想显示存储在SD卡中的图像列表.那么如何在我已经实现的代码中完成.如果有人对此有所了解,请帮我解决这个问题.
我写的代码是
WidgetProvider.java
public class WidgetProvider extends AppWidgetProvider
{
public static String EXTRA_WORD=
"com.commonsware.android.appwidget.lorem.WORD";
@Override
public void onUpdate(Context ctxt, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
{
for (int i=0; i<appWidgetIds.length; i++)
{
Intent svcIntent=new Intent(ctxt, WidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews widget=new RemoteViews(ctxt.getPackageName(),
R.layout.widget);
widget.setRemoteAdapter(appWidgetIds[i], R.id.words,
svcIntent);
Intent clickIntent=new Intent(ctxt, LoremActivity.class);
PendingIntent clickPI=PendingIntent
.getActivity(ctxt, 0,
clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
widget.setPendingIntentTemplate(R.id.words, clickPI);
appWidgetManager.updateAppWidget(appWidgetIds[i], widget);
}
super.onUpdate(ctxt, appWidgetManager, appWidgetIds);
}
}
Run Code Online (Sandbox Code Playgroud)
WidgetService.java
public class WidgetService extends RemoteViewsService
{
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent)
{
return(new WidgetDisplay(this.getApplicationContext(), …Run Code Online (Sandbox Code Playgroud)