当前位置: 首页 > 面试题库 >

setTextViewText不更新小部件

东博瀚
2023-03-14
问题内容

下面显示的是我班的简化版本。我在onReceive方法上遇到了麻烦,该方法没有更新小部件TextView。它在logcat中显示正确的信息,该信息在setTextViewText之前的行上输出。我不确定出什么问题了,并且一直在拔头发(而且我已经秃顶了)。

public class SnowWidget extends AppWidgetProvider {

public static List<Article> mymtns = new ArrayList<Article>();
public static RemoteViews remoteViews;
public static ComponentName thisWidget;

public static String amount = "";
public static String mtn_name = "";
public static String desc = "";
public static String condition = "";
public static String[] type;

public static int index = 0;

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

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

    thisWidget = new ComponentName(context, SnowWidget.class);

    // This one works fine
    remoteViews.setTextViewText(R.id.snowwidget,  mtn_name+ "\n"+ amount+"\"\n"+ condition);

    /* Make the buttons work */

Intent next = new Intent(context, SnowWidget.class);
next.setAction(ACTION_WIDGET_RECEIVER);

PendingIntent nextPendingIntent = PendingIntent.getBroadcast(context, 0, next, 0);
remoteViews.setOnClickPendingIntent(R.id.nextMtn, nextPendingIntent);

/* END - Make the buttons work */

    appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}

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

    // check, if our Action was called
    if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
        if(mymtns.size() > 0)
        {

            // This show up correctly in logcat
            Log.d("onReceive", "New Info => "+ mtn_name+ "\n"+ amount+"\"\n"+ condition);
            // This never updates my widget
            remoteViews.setTextViewText(R.id.snowwidget,  mtn_name+ "\n"+ amount+"\"\n"+ condition);

        }
    }

    super.onReceive(context, intent);
}

}


问题答案:

找到了答案。调用后,remoteViews.setTextViewText您需要通过调用来更新窗口小部件updateAppWidget。我添加的代码如下所示。

AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, remoteViews);


 类似资料:
  • layout-widget.xml: background.xml: 来自DbAdapter.java的getTextViewData(): 有人知道我的代码中缺少了什么吗?

  • 当我试图从我的web服务器获取SOAP响应时,我的小部件更新服务抛出了一个:“android.os.NetworkOnMainThreadException”。 我确信SOAP代码没有错误,因为我只通过IntentService而不是服务在应用程序中使用相同的代码。 我根据最后一个示例设计了我的小部件:http://www.vogella.com/tutorials/AndroidWidgets/

  • 我正在尝试创建一个PyQt5应用程序,其中我使用了某些标签来显示状态变量。为了更新它们,我手动实现了自定义。然而,在调试时,我发现GUI的值发生了变化,但是这些值没有反映在主窗口上。 一些答案建议调用偶尔。但是,这会立即使应用程序崩溃,并冻结应用程序。 这是一个示例代码(所有必需的库都被导入,这只是部分创建问题,实际代码很大): 语句的输出与预期一致。但是,标签中的文本不会更改。 中的函数由某个线

  • 需要更新时钟小部件的TextView每秒或每分钟变化。 我正在从AppWidgetProvider的onReceive调用服务: 我应该做什么来检查更新的时间,如果有,然后更新‘时间’文本视图… 任何一种都是非常非常非常感谢的

  • 我在收集JSON的Nifi中获得了一些数据,但是它需要插入的表具有不同的格式。 我很难将JSON结构分解成更小的部分--第二个部分似乎是两三个部分的转变。有什么想法能让我进入下一步吗? 产出:

  • 我想使用kartik yii网格制作可编辑网格。但是当我试图安装它通过作曲家使用以下命令 但它会从我的供应商那里更新很多东西,甚至是yii2框架引导。谁能建议我在不影响其他供应商的情况下安装这个小部件?