Home-Automation-App

@+id erstellt die ID den int Wert der beim compilieren genutzt wird. Du in der App sprichst es ja über den von dir vergebenen Bezeichner an. Und der sollte eindeutig in der App sein. Die echte ID der int wird vom Compiler erstellt.
Beiträge automatisch zusammengeführt:

Layouts lassen sich auch im Java Code erstellen.
 
Zuletzt bearbeitet:
Code:
AppCompatActivity appCompatActivity = new AppCompatActivity();
appCompatActivity.setContentView(relativeLayout, relativeLayoutParams);
Wie muss das für ein Widget aussehen? Tausend Beispiele für eine Activity aber im verfluchten Internet nicht ein einziges für ein Widget.
 
Zuletzt bearbeitet:
Was, willst du mit der Klasse AppCompatActivity.
Was du brauchst ist der Context der Activity oder des widgets.
Eine neu Intstaz der Klasse müßt dir nichts.
Beiträge automatisch zusammengeführt:

In einem Home Screenwidget was du wahrscheinlich hast greifst du über die remoteViews auf deine View Elemente im Layout zu.


Hier ein älteres sicher noch gültiges Beispiel für ein Widget.

Android (Home screen) Widgets - Tutorial

App Widgets Overview | Android Developers
 
Zuletzt bearbeitet:
jogimuc schrieb:
Ich habe mir das Beispiel angesehen. Darin steht nichts Neues. Es ist denn auch NICHT für den Update eines bestimmten Widgets ausgelegt, sondern aktualisiert ALLE Widgets, beim Klick auf irgendein Widget. Na, und das steht natürlich ganz unten auf der Seite, nachdem ich das alles durch habe:

Once called, this service will update all widgets. You can click on one of the widgets to update all widgets.

Soweit war ich schon.

Was ich suche ist ein Weg, beim Klick auf ein Widget nur dieses eine Widget upzudaten. Ich möchte zumindest die Option haben, mehrere Widgets mit unterschiedlichem Inhalt anzulegen, die - in Abhängigkeit von ihrem Inhalt - aktualisiert werden.

Beispiel:

Widget 1 -> Button A onCklick -> rufe URL 1 auf und frage Daten ab -> schreibe Daten in Widget 1
Widget 2 -> Button A onCklick -> rufe URL 2 auf und frage Daten ab -> schreibe Daten in Widget 2
Widget 3 -> Button A onCklick -> rufe URL 3 auf und frage Daten ab -> schreibe Daten in Widget 3
usw.

Mein Problem: Bei Klick auf Button A egal welchen Widgets, ruft er die URL 1 auf und trägt die empfangenen Daten in alle Widgets ein. Ich habe auch nicht die Möglichkeit, dem Intent die ID des Widgets mitzugeben. Die ist stets gleich. Habe sie mir ausgeben lassen. Obwohl noch in der Methode onUpdate verschiedene ID genannt werden, für die ich dann jeweils einen PendingUpdate setze (an den ich die ID anhänge), tritfft in der onReiceive stets nur der letzte aller PendingIntents ein. Also der mit der höchsten appWidgetId.

Ich habe einfach noch nicht begriffen, was da wieso passiert. Mehr / andere Beispiele können das veranschaulichen. So lerne ich. Wenn ich aber stets nur dasselbe Beispiel im Netz finde, kann ich nichts lernen. Ich renne also tagelang im Kreis, weil niemand den Unterschied hervorstellt, da alle Beispiele nicht auf meine Situation anwendbar sind, denn alle Beispiele sind gleich.

Ich habe es mit dynamisch erstellten Widgets versucht, und die Komponenten TextView, Button usw. individuell benannt, um sie individuell ansprechen zu können. Das schien mir ein guter Ansatz zu sein. Wenn aber in der onReceive nicht einmal die richtige WidgetId zu ermitteln ist, kann ich mir das sparen. Woher soll der Receiver wissen, welches Widget er updaten soll? Ich kann ja scheinbar so viele setAction und putExtra an einen Intent hängen wie ich will. In der onReceive sind die vergessen. Ich lasse mir dort alles ausgeben. Da kommt immer nur der letzte Intent an.

Sicherlich mache ich da was falsch. Aber was, wird mir nie klar, wenn ich nicht ein Beispiel finde, das mir meinen Fehler verdeutlicht. Da ich meinen Fehler nicht kenne, suche ich mich entsprechend tot. Das nervt langsam. Genauso war es bei Actionscript3. Hier hast du dann noch tausend Dokumente, was das Ganze eben nicht einfacher macht. Anstrengende Art zu lernen.
 
Zuletzt bearbeitet:
Hatte mir wegen des Frusts eine Auszeit genommen. Bin seit ein paar Tagen wieder an der App dran. Heute endlich der Durchbruch. Der Intent kommt im Receiver an und onReceive überschreibt mit...

updateWidget(context, remoteViews);

...alle Widgets. Was ich brauchte war eine Weiche. Die habe ich mit...

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
...
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
...erstellt habe. Jetzt wird nur noch das angeklickte Widget überschrieben. 🙂
 
Zuletzt bearbeitet:

Ähnliche Themen

GOPRAMEDIA
Antworten
1
Aufrufe
1.046
jogimuc
J
kosmus
Antworten
24
Aufrufe
17.331
jep
J
Zurück
Oben Unten