【问题标题】:Changing TextView text in an Android Widget更改 Android 小部件中的 TextView 文本
【发布时间】:2013-06-05 19:42:05
【问题描述】:

我正在开发一个 android 小部件。在小部件中,我有一个文本字段和两个按钮。当我按下 button1 时,我希望文本字段显示某个文本,例如“one”,如果单击 button2,文本字段将显示为“2”。

onUpdate() 看起来像这样:

 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){ super.onUpdate(context, appWidgetManager, appWidgetIds); 

    remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main);

    Intent intent = new Intent(context, CalculatorReceiver.class);
    intent.setAction(ACTION_WIDGET_RECEIVER);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

    PendingIntent actionPendingIntent =  PendingIntent.getBroadcast(context, 0, intent, 0);
    remoteViews.setOnClickPendingIntent(R.id.one, actionPendingIntent);
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); }

onReceive() 方法如下所示:

@Override public void onReceive(Context context, Intent intent) {

    super.onReceive(context, intent);

    if(intent.getAction().equals(ACTION_WIDGET_RECEIVER)){

         Toast.makeText(context, "Hi I'm 1", Toast.LENGTH_LONG).show();

         }}

现在,在小部件中,我只能在按下按钮时显示 Toast,但我想获取 textView 并更改其值。如何获取和更改 textView?

【问题讨论】:

标签: android widget


【解决方案1】:
  • 您无法从小部件中获取视图的值。

  • 您可以使用RemoteViews 更新小部件的TextView remoteViews.setTextViewText(R.id.text_view_id, "Your text");

【讨论】:

  • 嗨,是的,我知道,但是如果按下按钮,我该如何更新 TextView?我只能使用以下方法识别按钮按下:remoteViews.setOnClickPendingIntent(R.id.one, actionPendingIntent);并且 actionPendingIntent 将实现 onReceive() 方法。我无法在 onRecieve() 方法中获取 TextView,因为它会在 Receiver calass 中给我 NullPointerException。
  • 您可以在onReceive 方法中再次创建RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main),然后更新文本视图。或者我错过了你的问题..
  • 在这之后,也做appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
【解决方案2】:

请尝试在 onReceive() 中添加以下行

remoteViews.setTextViewText(R.id.widget_appNameView, "文本视图更新");

组件名称 componentName = new ComponentName(context, WidgetProvider.class); AppWidgetManager.getInstance(context).updateAppWidget(componentName, remoteViews);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多