【问题标题】:How to update view of a widget on button click in android?如何在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);

但它会启动另一个我不想去另一个活动的活动。我只需要在单击按钮后用新值更新相同的小部件视图。有什么想法吗??

【问题讨论】:

    标签: android android-widget android-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】:

    【讨论】:

    • 好的,这将更新相同的视图,这很好。但是如何为视图设置新值?我的意思是在按钮单击后我想设置像 newView.setTextViewText(R.id.textView_day_name, day1); 这样的值安装了 day.so 我想检测按钮点击事件。
    • 重复问题。查看链接:[链接]stackoverflow.com/questions/11907928/…
    • 听起来一样,但并没有解决我真正需要解决的问题。
    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2013-01-13
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多