我是android的noob,我遇到更新appwidget的问题。这是一个每20秒显示不同文本的新闻小部件。在小部件初始化时,我可以正确地切换&显示文字。但是,在每隔30分钟更新一次widget后,我的widgetID int数组将保留更新前存在的int。所以在每次更新之后,小部件会显示旧数据和新数据。是否有更新过程中清除旧数据的小部件ID 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); }
}
编辑
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); }
}
也许如果你设置其他{storyCounter ++; } to storyConter = 0;会做的伎俩。 – k0sh 2013-02-21 16:15:08
感谢您的回复。这将如何防止以前的widgetid的数据被显示? – 2013-02-21 16:17:15
我从来没有使用过小部件,但我使用位图很多。当我想重置某个位图时,我会调用bmp = null;我不确定你想在那里做什么。但你调用storyCounter ++;当storyCounter = 0时;并在你的其他声明。这意味着你清除了你的storyCounter = 0;然后你调用storyCounter ++;为什么要这么做 ?从逻辑上讲,如果你在其他语句中你必须做不同的事情,但在你的事情中你做了两次同样的事情。 – k0sh 2013-02-21 16:22:21