Hmm also die billigste Lösung
Linearlayout | | vertical.
darin zwei Linearlayouts. Weight 0.5 und schon sind Sie gleichgross.
Hmm also die billigste Lösung
Linearlayout | | vertical.
darin zwei Linearlayouts. Weight 0.5 und schon sind Sie gleichgross.
Na wenn du die Daten hast einfach einen Post Request absetzen ...
public void postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
Alles anzeigen
Am besten den Admin fragen ob er Dir die Schnittstelle offen legt bzw. du genau erfährst ob es POST oder GET Parameter sind und welche Formnamen erwartet werden.
Da musst du Dir eine Client Server Anwendung programmieren.
Server läuft auf dem PC und lauscht die ganze Zeit an einem Port (Netzwerk TCP) -< wenn dort Kommandos eintrudeln wird die PC App aktiv und "drückt zum Beispiel eine Taste" oder was auch immer
Client läuft auf dem Android Handy/Tablet -> bau bei Bedarf eine Verbindung mit dem "Server" auf und sendet Kommandos über TCP.
Kommando "drücke taste" + parameter "x" -> würde dann beispielsweise "Taste X" drücken.
-> das ganze kannst du über Netzwerk TCP/IP oder auch zb. Bluetooth lösen (wenn der PC BT hat),
naja da dürftest du erst einmal genug Futter für Ideen haben.
Ein User hier im Forum hat so eine Android-PC Schnittstelle bereits programmiert und seine App gibt es auch im Market, eventl kann er Dir da noch ein
paar Tipps geben.
Liest du hier.
Hier auf Stackoverflow hatte jemand das selbe Problem.
http://stackoverflow.com/quest…a-webview-with-custom-css
Die Lösung in deinem Fall sehe so aus, du müsstest mal schauen wie die css datei auf der Schulseite heisst und dir dann eine eigene Version in deinem Assetfolder erstellen. Und dann im Webview die Seite laden und gut ist.
PS: vorrausgesetz die Seite ist wirklich ordentlich mit CSS Formatiert, falls Sie mit Tabellen und festen Pixelbreiten arbeiten hast du ein Problem.
dann recyclest du den View mit (getView) -> das heisst du musst für jeden Eintrag die EIgenschaften (schriftfarbe, gechecked ect) per Hand setzen ,
Am besten du benutzt eine View-Holder Pattern, da sollten diese Fehler nicht mehr auftreten.
Na du schreibst Dir das in deinen OnClickListener vom Listview so würde ich das machen - habe gerade gesehen in dem Beispiel unten bauen sie im Viewholder für jeden Eintrag einen OnClickListener -> das könnte je nach Datenbestand etwas heftig werden..
Wichtig ist das du bei Listviews mit Checkbox in deiner Listview XML focusable="false" stehen hast, damit die Klicks auch delegiert werden.
Wenn du Probleme mit dem Klick hast, dann einfach noch mal googlen da gibt es 1000 Lösungen.
http://www.mysamplecode.com/20…iew-checkbox-example.html
http://stackoverflow.com/quest…ng-able-to-receive-itemcl
Hmm warum in den onTouch Listener nehme, wenn ich ehrlich bin muss ich sagen, ich weiss es nicht mehr, bilde mir aber ein, das es irgnedwas mit Multitouch und Gesten zu tun hatte.
im onCreate steht noch das bei mir
und der Listener sieht so aus
/** ------------- **/
/** Touchabfragen **/
/** ------------- **/
public boolean onTouch(View view, MotionEvent event)
{
if (puzzle_geloest == true){ // Wenn gelöst dann bitte kein Input mehr
invalidate();
return true;
}
int eventaction = event.getAction();
int X = (int)event.getX();
int Y = (int)event.getY();
switch (eventaction ) {
case MotionEvent.ACTION_DOWN: // Touch ausgeloest - aktuelles Teil suchen und markieren
aktuellesTeil = findePuzzleteil(X, Y);
break;
case MotionEvent.ACTION_MOVE: // Bewegung gestartet - auf Ziel prŸfen
if (aktuellesTeil > -1){
Puzzleteil teil = Puzzle.get(aktuellesTeil);
teil.x = X-(pbreite/2);
teil.y = Y-(phoehe/2);
Puzzle.set(aktuellesTeil, teil);
}
tauschidx = findePuzzleteil(X, Y);
break;
case MotionEvent.ACTION_UP: // Losgelassen
// Teil wird fallen gelassen -> Tauschen
if (aktuellesTeil > -1){
// Wo wurde fallen gelassen
tauschidx = findePuzzleteil(X, Y);
// PrŸfen und eventl Tauschen
if (aktuellesTeil != tauschidx && tauschidx != -2){
tauschePuzzleteil(aktuellesTeil, tauschidx);
aktuellesTeil = -1;
tauschidx = -2;
// Nun schauen ob sich neue Verknuepfungen ergeben haben
pruefeVerbindungen();
// Nun noch Puzzle auf Lösung prüfen
pruefeLoesung();
}
else { // Nix gefunden Teil zurŸcklegen
Puzzleteil teil = Puzzle.get(aktuellesTeil);
teil.x = puzzlekoordinaten.getKoordinate(teil.last_position).x;
teil.y = puzzlekoordinaten.getKoordinate(teil.last_position).y;
Puzzle.set(aktuellesTeil, teil);
aktuellesTeil = -1;
tauschidx = -2;
}
}
break;
}
invalidate(); // Ok alles Neuzeichnen
return true;
}
Alles anzeigen
Da ich zu faul war etwas selber zu schreiben, zitiere ich mal - der Mechanismus unter Java nennt sich Garbage Collector
Zitat
Java verwaltet den dynamischen Arbeitsspeicher vollkommen selbständig. Der Programmierer muss nicht Sorge für die Allokation und korrekte Freigabe des Speichers tragen. Realisiert wird dies über einen speziellen Prozess, der ständig im Hintergrund der JVM mitläuft. Er prüft, ob ein Objekt noch länger verwendet wird und gibt dessen allokierten Speicherbereich gegebenenfalls frei.
An dieser Stelle gilt es zu unterscheiden. Java behandelt lokale Variablen und Klassenobjekte differenziert. Der Garbage Collector gibt den Speicher allerdings nur in gewissen Intervallen frei, also wenn er als niedrig laufender Prozess entscheidet. Daher kann es zu Verzögerungen kommen, wenn Objekte bereits nicht mehr verwendet werden. Es besteht aber auch die Möglichkeit, diesen Prozess über das System direkt aufzurufen.
Hmm zu den folgenden Fragen, was soll es den werden mit den Images ???
Eventl ist es einfacher dir ein eigenes Control (so hiess das damals unter Delphi ) zu bauen. Also in Android/Java kannst du Dir zb einen View ableiten und dort das onDraw überschreiben. Ich habe das mal für ein Puzzle gemacht (da werden die Images auch verschoben) und da sieht das in etwas so aus
Zitat
public class PuzzleView extends View implements View.OnTouchListener{
Wie gesagt, ich würde jetzt davon abhängig machen was du vor hast. Hier noch etwas Lesestoff zum Thema "eigene Views"
Super, danke für die Erklärung.
So habe ich das auch gemacht, sprich die Anzahl der Teile pro Schwierigkeitsgrad bleibt gleich, nur die Größe der Teile ändert sich je nach Auflösung.
Und skalieren tue ich ebenfalls manuell vor Beginn des Spieles.
Es hätte ja sein aber sein können, das es da noch einen anderen Kniff gibt.
Zitat01-04 12:28:57.499: E/AndroidRuntime(1032): Caused by: java.lang.ClassCastException: com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment
da dürfte das Problem liegen.
Mit der neuen Google Api habe ich auch noch nix gemacht, da sie erst ab API11 läuft .
Keyerstellung fand ich schon wieder nervig, schon wieder ein neuer Key, langsam verliert man die Übersicht.
Hmm eigentlich nicht, zumindest wurde dies als Lösung genannt.
Hier noch mal zum selber nachlesen, vielleicht übersehe ich ja etwas
Ich glaube den _id Primärkey legt SQLite immer selber an. (das sind ja dann immer auch die Long Ids dir du über den CursorAdapter zurückbekommst)
Dagegen kann man sich schlecht wehren.
Eigene Keys kannst du aber selber noch anlegen.
Also bei Stackoverflow findet man den Tipp bzw Hinweis, das man setDependency
erst nach einem Aufruf von addPreference nutzen kann. Sonst gibt es den von Dir beschriebenen Absturz.
Zeig doch mal den Code wie du im onListItemClick aussliest.
-> onListItem gibt Dir ja einen View zurück bzw. kannst du Dir ja auch per Position die Daten aus dem Adapter holen.
Wenn du das über einen View löst müsste deine Aufruf unten mindestens
TextView Wert = (TextView) v.findViewById(R.id.text2);
lauten.
Zitat
fussball.de biete ein Widget an.
Zur Nutzung muss man einen Schlüssel generieren. Bei dieser Generierung muss zwingend eine Internetseite angegeben werden.
Wie kann ich es dann nutzen?
Da fehlt mir der Schulterschluss zu meiner Android-Anwendung.
Ich möchte die Daten doch unabhängig von einer Webseite auf dem Smartphone anzeigen.
so habe ich das auch verstanden.... Das Problem auf der Fussball.de Seite bieten Sie nur das Widget an. Da wird man um eine Anfrage nicht drum herum kommen.
ZitatIch verstehe das so, das ich dann nicht das Widget nutzen kann, sondern bei fussball.de nach einer Datenschnittstelle fragen muss, über die ich die Daten einlesen und dann aufbereiten kann.
genau.
ZitatVerbal kurz beschrieben: Seite aufrufen, Wunsch über Parameter mitteilen, Daten erhalten und verarbeiten.
Normalerweise arbeiteten so grosse Seiten mit jeder Menge 3 Anbietern zusammen, d.h. Sie müssten da so etwas wie einen WebService haben.
Die Frage ist halt ob man Dich da ran lässt und ob es kostenlos ist.
Deswegen sagte ich ja, falls du eine Rückmeldung von Fussball.de bekommst wäre das Ergebnis sicher auch interessant für andere Nutzer.
Du versuchst also eine Google Map in ein Fragment zu packen ???
ist eigentlich so nicht möglich (erst die neuste GoogleMapsApi supportet das )
Also Webservice sprich Zugang per XML/JSOn ist immer der beste Weg, der Anbieter stellt Dir dann ein Protokoll Datenformat zur Verfügung und alles ist gut.
Parsen ist schon ein sicherer Weg, du nimmts die HTML Struktur auseinander und da bestimmte HTML Elemente durch ID ect gekennzeichnet sind kann man das schon ganz gut auslesen, das Problem: sobald sich die Seitenstruktur verändert, musst du halt nachziehen und umbauen -> das ist der unsichere Teil.
Also frag am besten mal bei Fussball.de, was Sie Dir bieten können.
Falls du da eine antwort bekommst, kannst du sie hier ja auch posten, da weiss man gleich für die Zukunft ob dort ein Weg existiert.
Ich hätte mal eine technische Frage, weil ich hier auch noch eine Puzzle rumliegen habe und das mehr so als Pausenspiel bei einer anderen App mit beilegen wollte, deswegen ist es mehr oder weniger halbfertig. (Puzzeln geht, nur das Menü ect fehlt noch)
Wie löst du das Problem mit der Skalierung der Auflösung auf unterschiedlichen Geräten ? Größere/Kleinere Teile ? Mehr/Weniger Teile ?
Alles klar, du willst also sicherstellen, wenn jemand deinen Spinner öffnet / dabei das Gerät dreht / das der Spinner auch wieder aufgemacht wird.
hmmm, wenn das Android von Hause aus nicht automatisch macht, könnte ich mir nur ne Bastellösung vorstellen -< das Problem ist das spinner zwar laut Papier einen onClick implementiert aber laut Aussagen einiger GoogleGroups dieses Event niemals gefeuert wird.
Jetzt muss ich aber noch mal ganz genau nachfragen -> du baust Dir gerade eine Seite mit Einstellungen zusammen ? Richtig ?
Warum benutzt du nicht die Android übliche Variante -> PreferenceActivity ? -> da kümmert sich Android um das sichern bzw wiederherstellen der Zustände/Daten.
Ich hab leider keine deutschen Quellen gefunden, hier aber etwas mit viel Bildern
http://androidresearch.wordpre…ence-activity-in-android/