java - 小部件不更新 View

标签 java android android-intent widget textview

根据我的 LogCat,基本上我的 Widget 会更新,而我的 Widget 布局中的 TextView 不会。它在第一次启动时更新,但我想做的是在 BrocastReceiver 之后使用 Intent 人为地更新它。 Intent 工作正常,onUpdate 在 onReceive 之后运行,但文本未更新。我感觉这与使用不同的上下文、AppWidgetManager 或 appWidgetIds 这一事实有关。

这是我的方法:

String sent = "0";

@Override
public void onReceive(Context context, Intent intent){
    String action = intent.getAction();
    if(action != null && action.equals("27")){
        Log.i("Updating", "UPDATING WIDGET");
        sent = intent.getStringExtra("Sent");
        onUpdate(context,AppWidgetManager.getInstance(context),
                new int[]{0});
    }
    super.onReceive(context, intent);
}


@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds){
    Log.i("Widget","onUpdate");
    String begin = "Sent ";
    String end = " Texts Since Last Visit";
    final int N = appWidgetIds.length;
    for(int i = 0 ; i < N; i++){
        int widgetId = appWidgetIds[i];

        Intent intent = new Intent(context,History.class);
        PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);

        views.setOnClickPendingIntent(R.id.LLwidget, pi);
        Log.i("Widget","Sent: " + sent);
        views.setTextViewText(R.id.SentTextView, begin + sent + end);
        appWidgetManager.updateAppWidget(widgetId, views);
    }
}

list :

 <receiver android:name="MyWidgetProvider">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/widget_info"/>
    </receiver>

小部件信息:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:updatePeriodMillis="30000" 
  android:initialLayout="@layout/widget_layout" 
  android:minHeight="72dip" 
  android:minWidth="146dip">

</appwidget-provider>

我认为这是所有必要的信息,因为我确信 Intent 有效并且 onUpdate 运行。

希望有人能帮助我,因为这是我第一次尝试制作一个小部件,我的大脑因为缺乏 sleep 而有点疲惫。 谢谢, 布兰登

最佳答案

您正在将 0 作为应用小部件 ID 传递。这很可能不是有效的应用小部件 ID。使用适当的应用程序小部件 ID(例如,您放入附加到点击事件的额外 Intent 的 ID)或使用执行此操作的 updateAppWidget() 版本不带应用小部件 ID。

关于java - 小部件不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6671607/

相关文章:

Android Studio - 可以按哪个按钮激活功能 "know"吗?

java - 如何修复 Kafka Producer 示例的 NoClassDefFoundError?

Android - 在 onBackPressed() 之后执行函数;

java - 从 Android Intent 打开图库应用

android - 我想将 Scrollview 添加到 Button?

android - 如何创建从网站检索视频的Android应用

Android:设备重启时是否触发了 android.intent.action.DATE_CHANGED?

java - 使用 JanusGraph Java API 和 HBase 时出现 TemporaryBackendException

java - 将 XMPP 协议(protocol)合并到 Android 应用程序中

java - 如何在 Hadoop 中序列化 Java 对象?