如何在Android上点击按钮后更新小部件的视图?

4
我正在开发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);

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

2
我发现了我的代码问题。当我试图使用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);

    }

1
你的刷新按钮在哪里? - natsumiyu

0

好的,那么这将更新相同的视图,这很好。但是我如何为视图设置新值呢?我的意思是,在按钮单击后,我想设置像newView.setTextViewText(R.id.textView_day_name, day1)这样的值,而不是day。所以我想检测按钮单击事件。 - Dinesh Anuruddha
重复问题。请检查链接:[link]http://stackoverflow.com/questions/11907928/android-app-widget-button-to-change-textview-content - Anupam
听起来好像一样,但它并没有解决我真正需要解决的问题。 - Dinesh Anuruddha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接