通过 remoteview Android 更新小部件
Posted
技术标签:
【中文标题】通过 remoteview Android 更新小部件【英文标题】:Widget update via remoteview Android 【发布时间】:2014-05-28 05:59:15 【问题描述】:我希望我的活动“but1”通过我的 but1 活动中的按钮更新小部件按钮上的文本。我试过了,它没有显示错误,但小部件仍然没有更新。清单文件中缺少我的东西吗?此外,日志猫也没有显示任何问题 以下是我在 But1.class 中的代码
et1.setOnClickListener(new OnClickListener()
Intent in=new Intent();
Bundle extras=in.getExtras();
if(extras!=null)
awID=extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
aw=AppWidgetManager.getInstance(context);
@Override
public void onClick(View arg0)
// TODO Auto-generated method stub
RemoteViews rv=new RemoteViews(context.getPackageName(),R.layout.activity_main);
rv.setTextViewText(R.id.button1, "Mughazf,f,jvnl");
aw.updateAppWidget(awID, rv);
Intent result=new Intent();
result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
setResult(RESULT_OK,r
esult);
我的小部件是:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
final int N = appWidgetIds.length;
for (int i=0; i<N; i++)
int appWidgetId = appWidgetIds[i];
Intent intent = new Intent(context, But1.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.activity_main);
views.setOnClickPendingIntent(R.id.button2, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
【问题讨论】:
我的回答对你有帮助吗? 【参考方案1】:问题应该出在 Widget App ID
上。您需要牢记Widget ID
,以便以后更新。
您的Widget Provider
onUpdate() 方法应将Widget id
存储在shared preference
或database
中
我在这里使用shared preference
,
SharedPreferences prefs = context.getSharedPreferences("private preference", Context.MODE_PRIVATE);
// here i am saving one widget id. change your logic to store all the widget id's
prefs.edit().putInt("WidgetId",appWidgetId).commit();
然后当Activity
启动并单击按钮时。您可以像这样更新widget layout
首先从shared Preference
阅读Widget ID
SharedPreferences prefs = getSharedPreferences("private preference", Context.MODE_PRIVATE);
int awID = prefs.getInt("WidgetId", AppWidgetManager.INVALID_APPWIDGET_ID);
然后,创建RemoteView
的实例并将新文本设置为TextView
RemoteViews rv=new RemoteViews(getPackageName(),R.layout.widget_layout);
rv.setTextViewText(R.id.textView1, "Some one updated Me");
然后,获取AppWidget Manager
的实例
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
最后,用新的RemoteView
Layout
更新Widget
。
appWidgetManager.updateAppWidget(awID, rv);
所以,awID - 是我们从onUpdate
方法得到的Widget Id
。
这应该可行。如果您发现任何问题,请告诉我。
【讨论】:
以上是关于通过 remoteview Android 更新小部件的主要内容,如果未能解决你的问题,请参考以下文章
《android开发艺术探索》读书笔记--RemoteViews
为啥 AppWidgetManager 会更新所有 RemoteViews for Widgets 的 Intent?
Android:将位图从本地存储加载到应用小部件(RemoteViews)