首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在Widget中更新Button的文本

无法在Widget中更新Button的文本
EN

Stack Overflow用户
提问于 2013-08-03 16:40:11
回答 3查看 2.8K关注 0票数 1

如何访问主屏幕Widget的项,以便对它们进行更改,比如设置Button文本?在AppWidgetProvideronReceive()方法中,我试图设置Button的文本,该文本位于主屏幕小部件中:

代码语言:javascript
复制
@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

代码语言:javascript
复制
<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>

我正在接收Broadcast,但是我的Widget显示了以下文本:“问题加载小部件”。

我在catlog中找到了以下消息:编辑

代码语言:javascript
复制
W/AppWidgetHostView(135): updateAppWidget couldn't find any view, using error view
W/AppWidgetHostView(135): android.widget.RemoteViews$ActionException: can't find view: 0x7f0a0004

0x7f0a0004是我的Widget's Button。为什么找不到它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-04 13:49:11

我刚找到解决办法。一直以来我都在传递错误的按钮ID。widgetButtonWidget的布局中不存在。它是我的主Activity的一个按钮。

票数 0
EN

Stack Overflow用户

发布于 2013-08-03 17:44:49

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

代码语言:javascript
复制
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setTextViewText(R.id.widgetname, newName);

或通过服务:

代码语言:javascript
复制
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);
  }

} 

不要忘记将服务添加到清单中。

代码语言:javascript
复制
<service android:name=".UpdateWidgetService"></service> 

然后在onUpdate中(在类中)

代码语言:javascript
复制
@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);
  }

我希望这能有所帮助:)

票数 2
EN

Stack Overflow用户

发布于 2014-08-26 07:20:19

进口android.widget.RemoteViews;

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

代码语言:javascript
复制
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.my_layout);
remoteViews.setTextViewText(R.id.Counter, "Set button text here");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18035041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档