Ниже показана упрощенная версия моего класса. У меня проблемы с методом 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);
}
}