Jestem noobem dla Androida i mam problemy z aktualizacją aplikacji. Jest to widget wiadomości wyświetlający inny tekst co 20 sekund. Nie mam problemu z wyświetleniem tekstu, aby prawidłowo przełączać wyświetlanie & po inicjalizacji widgetu. Jednak po każdych 30 minutach aktualizacji widżetu moja tablica widgetID int zachowuje int, który istniał przed aktualizacją. Po każdej aktualizacji widget wyświetla stare dane i nowe dane. Czy istnieje wyczyszczenie tablicy ID widgetu starych danych podczas procesu aktualizacji. Każda pomoc jest bardzo doceniana.Jak prawidłowo zaktualizować aplikację AppWidget?
mój kod:
allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
Metoda przełączania tekstu w widgecie. Działa to dobrze na początku, ale po aktualizacji pokazuje stare dane wraz z nowymi danymi ...
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); }
}
może, jeśli ustawisz else {storyCounter ++; } to storyConter = 0; da rade. – k0sh
Dzięki za odpowiedź. W jaki sposób zapobiegnie to wyświetlaniu danych poprzedniego widgetID? –
Nigdy wcześniej nie pracowałem z widżetami, ale pracuję z bitmapami. i kiedy chcę zresetować pewną bitmapę, zadzwonię do bmp = null; nie jestem pewien, co próbujesz tam zrobić. ale ty dzwonisz do storyCounter ++; gdy storyCounter = 0; i w twoim innym oświadczeniu. co oznacza, że wyczyściłeś swoją historięCounter = 0; a następnie nazwałeś storyCounter ++; dlaczego chcesz to zrobić ? logicznie w swojej instrukcji if else musisz robić różne rzeczy, ale w twoim przypadku robisz to samo dwa razy. – k0sh