6
我的小部件中的TextView在放置在主屏幕時正確設置了正確的信息。但是,當我更新主應用程序中的信息時,小部件仍顯示舊信息。安卓小部件中的TextView不會更新
清單:
<receiver android:name=".WidgetProvider" android:label="@string/app_name" android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" />
</receiver>
WidgetProvider.java:
package com.example.huskeliste;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class WidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
int widgetId = appWidgetIds[i];
DBAdapter info = new DBAdapter(context);
info.open();
String data = info.getTextViewData();
info.close();
Intent intent = new Intent(context, Main.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.loWidget, pendingIntent);
views.setTextViewText(R.id.txtView, data);
appWidgetManager.updateAppWidget(widgetId, views);
}
}
}
水庫 - widget.xml:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget"
android:minWidth="294dp"
android:minHeight="72dp"
android:updatePeriodMillis="1800000">
</appwidget-provider>
佈局 - widget.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loWidget"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:layout_margin="1dp"
android:background="@drawable/background">
<TextView
android:id="@+id/txtView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="22dp"
android:textColor="#ffffff"
android:text="" />
</LinearLayout>
個
background.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="#CC111111" android:endColor="#CC111111" android:angle="0" />
<padding android:left="4dp" android:top="1dp" android:right="4dp" android:bottom="1dp" />
<corners android:radius="3dp" />
</shape>
getTextViewData()從DBAdapter.java:
public String getTextViewData() {
String[] columns = new String[] { KEY_NAME };
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
String result = "";
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
if (result.length() > 0) {
result += ", ";
}
result += c.getString(0);
}
return result;
}
任何人有什麼線索的失蹤在我的代碼?
感謝快速的answere。在Main.java中,Intent中的「context」updateWidget = new Intent(context,WidgetProvider.class);是空的。我應該怎樣設定背景? – user1759708
上下文標記爲「上下文無法解析爲變量」。 – user1759708
這是您的活動環境。你可以在那裏使用'getBaseContext()'或'this'。 –