Android Can';t更新按钮';控件中的文本

Android Can';t更新按钮';控件中的文本,android,widget,homescreen,remoteview,appwidgetprovider,Android,Widget,Homescreen,Remoteview,Appwidgetprovider,如何访问主屏幕小部件,以便对其进行更改,如设置按钮的文本?在我的AppWidgetProvider的onReceive()方法中,我试图设置主屏幕小部件中的按钮的文本: @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(MainActivity.ACTION_CHANGE_BUTTONSTATE)) {

如何访问主屏幕
小部件
,以便对其进行更改,如设置
按钮
的文本?在我的
AppWidgetProvider
onReceive()
方法中,我试图设置主屏幕小部件中的
按钮的文本:

@Override
    public void onReceive(Context context, Intent intent)
    {
        if (intent.getAction().equals(MainActivity.ACTION_CHANGE_BUTTONSTATE))
        {
            String state = intent.getExtras().getString("state");
            Log.d("HomescreenWidget", "received broadcast for button state");

            RemoteViews views = new RemoteViews(context.getPackageName(),
                    R.id.widgetButton);
            views.setTextViewText(R.id.widgetButton, state);
            ComponentName cn = new ComponentName(context,
                    HomescreenWidget.class);
            AppWidgetManager.getInstance(context).updateAppWidget(cn, views);
        }
        super.onReceive(context, intent);
    }
我的小部件的
layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/widget_margin" >

    <Button
        android:id="@+id/playButton_Widget"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:minWidth="80dp"
        android:text="@string/playButton" />
</RelativeLayout>

0x7f0a0004
是我的
小部件
按钮
。找不到它的原因可能是什么?

要通过appwidget提供程序访问您的视图,您可以使用此远程视图

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setTextViewText(R.id.widgetname, newName);
或通过服务:

public class UpdateWidgetService extends Service {

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }

  @Override
  public void onStart(Intent intent, int startId) {
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
        .getApplicationContext());

    int[] allWidgetIds = intent
        .getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

    for (int widgetId : allWidgetIds) {

      RemoteViews remoteViews = new RemoteViews(this
          .getApplicationContext().getPackageName(),
          R.layout.widget_layout);

      remoteViews.setTextViewText(R.id.update,
          "Random: " + String.valueOf(number));

      appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }
    stopSelf();

    super.onStart(intent, startId);
  }

} 
别忘了将服务添加到清单中

<service android:name=".UpdateWidgetService"></service> 

我希望这能有所帮助:)

我刚刚找到了解决办法。一直以来,我都在为按钮传递错误的ID<代码>widgetButton
小部件的布局中不存在。这是我的主
活动中的一个按钮

导入android.widget.remoteview

//抓取布局,然后设置名为R.id.Counter的按钮的文本:

RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.my_layout);
remoteViews.setTextViewText(R.id.Counter, "Set button text here");

抱歉,只是想再次确认是否要从主屏幕小部件更改应用程序中的某些视图?我有一个属于主屏幕
小部件
布局的
按钮
。按下此按钮时,我想更改其文本标签。为此,我需要在主屏幕小部件中引用ittext标签?一个
按钮
,一个在主屏幕小部件中的按钮。这个按钮有这样一个文本标签:正如你所说,我已经通过RemoteView尝试过了(我编辑了这个问题,所以你可以看到我做了什么)。什么也没发生。
@Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int[] appWidgetIds) {

    ComponentName thisWidget = new ComponentName(context,
        MyWidgetProvider.class);
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

    Intent intent = new Intent(context.getApplicationContext(),
        UpdateWidgetService.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

    context.startService(intent);
  }
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.my_layout);
remoteViews.setTextViewText(R.id.Counter, "Set button text here");