我想要我的活动"但是1"在我的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);
}
}
}
答案 0 :(得分:4)
问题应与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
首先阅读Widget ID
shared Preference
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());
最后,使用新的Widget
RemoteView
更新Layout
。
appWidgetManager.updateAppWidget(awID, rv);
所以,awID - 是我们从Widget Id
方法获得的onUpdate
。
这应该有效。如果您发现任何问题,请与我们联系。