如何在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中单击按钮时更新小部件的视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android小部件中单击图像按钮显示吐司

CKEditor 5如何从任何小部件/模型/视图中获取单击,更新和删除的事件

如何在 android 小部件中使用 PendingIntent?

Android小部件onReceive崩溃

单击按钮后如何通过服务执行小部件更新?

在主屏幕小部件的列表视图上方添加一个按钮 - 如何捕获单击此按钮?