通过remoteview Android更新小部件

时间:2014-04-14 10:06:14

标签: android android-widget remoteview

我想要我的活动"但是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);


        }
    }

}

1 个答案:

答案 0 :(得分:4)

问题应与Widget App ID有关。您需要记住Widget ID以便稍后更新。

您的Widget Provider onUpdate()方法应将Widget id存储在shared preferencedatabase

我在这里使用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

这应该有效。如果您发现任何问题,请与我们联系。