如何在android中单击按钮时更新小部件的视图?
Posted
技术标签:
【中文标题】如何在android中单击按钮时更新小部件的视图?【英文标题】:How to update view of a widget on button click in android? 【发布时间】:2012-08-18 15:23:36 【问题描述】:我正在开发 android 小部件,我在该小部件上显示了一些来自 Web 服务的数据,它工作正常。听到的是代码。
代码
public class WatchWidget extends AppWidgetProvider
private static final String TAG = "WatchWidget";
@Override
public void onUpdate( Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds )
Log.i(TAG, "* onUpdate");
EBWeaterData ebwd=new EBWeaterData();
EBWeatreUtils.getWeatherFeeds(context, ebwd, "my url to get data");
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.main);
RemoteViews newView = new RemoteViews(context.getPackageName(), R.layout.test);
//get data
String day=ebwd.getDay_1()+ebwd.getDay_suffix_1()+" "+ebwd.getDay_name_1();
String minmaxtemp="Max Temp "+ebwd.getDay_max_temp_1()+"°C "+"Min Temp "+ebwd.getDay_min_temp_1()+"°C";
//set dat to views
newView.setTextViewText(R.id.textView_day_name, day);
newView.setTextViewText(R.id.textView_minmaxtemp, minmaxtemp);
newView.setImageViewResource(R.id.ImageView_icon, R.drawable.sunny);
views.addView(R.id.view_container, newView);
ComponentName thisWidget = new ComponentName(context,WatchWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, views);
我在该小部件上有一个按钮,现在我想在用户单击该按钮时使用不同的值更新小部件视图。我知道我必须处理它pendingIntent,如下所示。
Intent intent = new Intent(context, activitytogetNewdata.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.imageView1, pendingIntent);
但它会启动另一个我不想去另一个活动的活动。我只需要在单击按钮后用新值更新相同的小部件视图。有什么想法吗??
【问题讨论】:
【参考方案1】:我发现了我的代码的问题。当我要使用 pendingintent 更新我的视图时,它会在每个按钮点击时动态添加视图,因为我使用了 2 个布局,所以我解决了如下问题。(我使用一种布局而不是使用两种)
代码
public class WatchWidget extends AppWidgetProvider
private static final String TAG = "WatchWidget";
@Override
public void onUpdate( Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds )
Log.i(TAG, "* onUpdate");
EBWeaterData ebwd=new EBWeaterData();
EBWeatreUtils.getWeatherFeeds(context, ebwd, "my url to get data");
RemoteViews newView = new RemoteViews(context.getPackageName(), R.layout.test);
//get data
String day=ebwd.getDay_1()+ebwd.getDay_suffix_1()+" "+ebwd.getDay_name_1();
String minmaxtemp="Max Temp "+ebwd.getDay_max_temp_1()+"°C "+"Min Temp "+ebwd.getDay_min_temp_1()+"°C";
//set dat to views
newView.setTextViewText(R.id.textView_day_name, day);
newView.setTextViewText(R.id.textView_minmaxtemp, minmaxtemp);
newView.setImageViewResource(R.id.ImageView_icon, R.drawable.sunny);
ComponentName thisWidget = new ComponentName(context,WatchWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, newView);
【讨论】:
刷新按钮在哪里?【参考方案2】:阅读本教程。
访问http://www.developer.com/ws/android/programming/Handling-User-Interaction-with-Android-App-Widgets-3837531.htm
他们已经解决了你的问题。
【讨论】:
好的,这将更新相同的视图,这很好。但是如何为视图设置新值?我的意思是在按钮单击后我想设置像 newView.setTextViewText(R.id.textView_day_name, day1); 这样的值安装了 day.so 我想检测按钮点击事件。 重复问题。查看链接:[链接]***.com/questions/11907928/… 听起来一样,但并没有解决我真正需要解决的问题。以上是关于如何在android中单击按钮时更新小部件的视图?的主要内容,如果未能解决你的问题,请参考以下文章
CKEditor 5如何从任何小部件/模型/视图中获取单击,更新和删除的事件