Я обоюдный андроид, и у меня проблемы с обновлением appwidget. Это новостной виджет, который отображает разный текст каждые 20 секунд. У меня нет проблем с получением текста для правильного отображения &, когда виджет инициализируется. Однако после каждых 30 минут обновления виджета мой массив widgetID int сохраняет int, существовавший до обновления. Поэтому после каждого обновления виджет показывает старые данные и новые данные. Есть ли, чтобы очистить массив идентификаторов виджета старых данных во время процесса обновления. Любая помощь приветствуется.Как правильно обновить AppWidget?
Мой код:
allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
Способ переключения текста в виджете. Это отлично работает на начальном этапе, но после обновления показывает старые данные наряду с новыми данными ...
public void updateStory() {
tickerheadline = RssReader.rssheadline.get(storyCounter);
tickerstory = RssReader.rssstory.get(storyCounter);
remoteViews.setTextViewText(R.id.headline, tickerheadline);
remoteViews.setTextViewText(R.id.story, tickerstory);
if (storyCounter==RssReader.rssheadline.size()-1){
storyCounter = 0;
storyCounter++;
}else{
storyCounter++;
}
appWidgetManager.updateAppWidget(allWidgetIds, remoteViews);
//Log.e("Widget", allWidgetIds.toString());
mHandler.postDelayed(new Runnable() {
public void run() {
updateStory();
} } ,20000); }
}
EDIT
public void updateStory() {
//Added
appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext());
ComponentName thisWidget = new ComponentName(getApplicationContext(),MyWidgetProvider.class);
remoteViews = new RemoteViews(this.getApplicationContext().getPackageName(),R.layout.widget1);
tickerheadline = RssReader.rssheadline.get(storyCounter);
tickerstory = RssReader.rssstory.get(storyCounter);
remoteViews.setTextViewText(R.id.headline, tickerheadline);
remoteViews.setTextViewText(R.id.story, tickerstory);
if (storyCounter==RssReader.rssheadline.size()-1){
storyCounter = 0;
storyCounter++;
}else{
storyCounter++;
}
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
//appWidgetManager.updateAppWidget(allWidgetIds, remoteViews);
//Log.e("Widget", allWidgetIds.toString());
mHandler.postDelayed(new Runnable() {
public void run() {
updateStory();
} } ,20000); }
}
возможно, если вы установите else {storyCounter ++; } to storyConter = 0; будет делать трюк. – k0sh
Спасибо, что ответили. Как это предотвратит отображение данных предыдущего виджета? –
Я никогда раньше не работал с виджетами, но я часто работаю с растровыми изображениями. и когда я хочу сбросить некоторые растровые изображения, я назову bmp = null; Я не уверен, что вы пытаетесь сделать там. но вы вызываете storyCounter ++; когда storyCounter = 0; и в вашем другом заявлении. что означает, что вы очистили свою историюCounter = 0; а затем вы назвали storyCounter ++; Почему ты бы так поступил ? логически в вашем случае if else вы должны делать разные вещи, но в вашем случае вы делаете то же самое дважды. – k0sh