Beiträge von ubik

    In welcher Methode fügst du die textviews hinzu. oncreateView oder onactivitycreated .
    Wie ist dein layout aufgebaut mit XML oder willst du es dynamisch erstellen?


    Zeige mal wie du das machst.

    Hallo,


    ich mache das folgendermaßen:


    Dieser Code ist im onCreateView()-Teil:


    Code
    for (final ReadEvent readevent : alldatesmonthly_init_previous) {
    
    
    
    
                        long difference = (readevent.getDtstart() - calendar_millis) / 1000 / 24 / 60 / 60;
                        MonthFragment.this.addDate((int) difference + MonthFragment.this.start - 1, readevent.getEventname(), readevent.getCalendarid(), readevent.getEventcolor());
    
    
            }


    addDate:


    showPopup():



    Das alles ist in einem Fragment.


    Mein Wunsch wäre es, dass showPopup() in einem Hintergrundprozess aufgerufen wird.

    Hallo,
    wo hängt denn die App? Bitte etwas genauer.
    Aus einer Datenbank kanst du nur Texte auslesen und die dan in Textviews oder besser in eine Liste darstellen.
    Ist das Auslesen aus der Datenbank so langsam dann mache das nicht im UI Thraed.

    Die App hängt, wenn ich TextViews auf der GUI-Oberfläche darstellen will. Die Daten aus der Datenbank sind schnell im Speicher.


    Ich brauche also etwas, dass die TextViews erst dann hinzugefügt werden, wenn das Fragment angezeigt wird.

    Hallo,


    ich versuche verzweifelt einen neuen Kalender mit Googles API einzutragen.


    Hier ist mein Code:



    Die Variable accessToken ist definitiv richtig.


    Aber ich bekomme eine 400 HTTP Meldung als Antwort.


    Was mache ich falsch? :(


    (Den Key und das Oauth Passwort habe ich mit ... versehrt, ist aber definit richtig).

    Hallo,


    ich habe folgenden Code:


    Code
    private Drawable getIconForAccount(Account account, AccountManager manager) {
            AuthenticatorDescription[] descriptions =  manager.getAuthenticatorTypes();
            for (AuthenticatorDescription description: descriptions) {
                if (description.type.equals(account.type)) {
                    PackageManager pm = this.getApplicationContext().getPackageManager();
                    return pm.getDrawable(description.packageName, description.iconId, null);
                }
            }
            return null;
        }


    Dieser gibt ein Objekt vom Typ Drawable zurück.


    Wie kann ich denn die ID des Drawable herauslesen?


    Normalerweise kann man ein Drawable ja mit R.drawable.meindrawable aufrufen, was einen int-Wert zurückgibt.


    Wie krieg ich das denn dynamisch hin?


    Danke!

    Hallo,


    folgender Code:


    Code
    Uri uri = Uri.parse(CalendarContract.Instances.CONTENT_URI + "/" +
                    Long.toString(from) + "/" +
                    Long.toString(to));


    Ich frage mit diesem Code alle Kalendertermine, die täglich sind (from = Beginn Tag; to = Ende Tag).


    Das Problem, was ich jetzt habe, ist, dass wiederkehrende Termine, die länger als einen Tag dauern, da nicht drin sind.


    Beispiel:


    Aktuelles Datum: Samstag, 19. August 2017


    Termin: Freitag, 11. August 2017 14:00 Uhr bis Samstag, 12. August 2017 15:00 Uhr, wiederholt sich wöchentlich.


    Dann habe ich das Problem, dass am Samstag, 19. August 2017 der Termin nicht angezeigt wird.


    Wie kann ich das beheben?

    Hallo nochmal,


    ich glaube, dass die LinearLayouts das gar nicht machen, dass es so lange dauert.


    Es ist diese Zeile:


    Code
    events.getCalendarColor(calendarid)


    Dort lese ich die Kalendarfarbe aus der Datenbank. Hmmm.


    Habe es auch mit ListView probiert, das brachte keinen Erfolg. Erst als ich die Kalendarfarbe wegließ, lief es wie geschmiert.


    Edit: Ja, es war diese Zeile. Manchmal muss man die Stecknadel im Heuhaufen suchen :D

    Du solltest den Code so schreiben das du nicht in der for schleife auf die GUI zugreifst

    Wie meinst du das? Wie kann ich denn ohne die for-Schleife auf die GUI zugreifen?



    Ps. wieso zeigst du mehr als einen Monat an wenn du auf Monat bist? Schränke deine suche ein sowie es die Kalender app auch machen. Dann hast du auch keine200 Datensätze .

    Naja, dann sind es aber auch nur 11 Tage weniger. Ich zeige sie deswegen an, weil ich sonst leere Spalten hätte und das wäre nicht so elegant ;)

    Hallo, hier ein Screenshot:



    Aber auch wenn ich bloß ein TextView hinzufüge (also ohne das ganze LinearLayout-Gedöns), dann dauert es auch 3-4 Sekunden.



    Mein Wunsch wäre es unter 1,5 Sekunden zu kriegen oder, dass die Termine im Hintergrund hinzugefügt werden.



    Ich bin mir auch nicht sicher, was so lange dauert.



    Es passiert vor allem, wenn Termine sich wiederholen (also wenn RRULE gesetzt ist).

    hallo richtig ist das man so Zeitaufwendige Sachen in einen separaten thread ausführt. Dazu musst du deine Methode ziemlich umbauen. Denn du fürst ja in der For schleife auch zugriffe auf die GUI Ui thread aus.
    Wie viele Layouts erzeugst du eigentlich die Methode showpopup wird ja fast bei jeden schleifendurchlauf aufgerufen. Kannst du das nicht mit einer listview machen ?


    Das sind etwa 100 Layouts. ListView geht leider nicht, weil die 100 Layouts untereinander, bzw. nebeneinander angeordnet werden müssen.

    Hallo,


    ich habe folgenden Code:



    Ich habe das Problem, dass in der for-Schleife bei ungefähr 200 Datensätzen die App für 3-4 Sekunden hängt.


    Gibt es eine Möglichkeit, diese Datensätze erst dann hinzuzufügen, wenn das GUI geladen ist?


    Oder habt ihr noch andere Ideen, um die for-Schleife schneller zu machen.


    Das Problem macht folgende Zeile NICHT:

    Code
    ArrayList<ReadEvent> alldatesmonthly_init_previous = events.getAllEventsByMonth(c1_init_previous2, c2_init_next);


    Sondern: Es ist die for-Schleife. Keine Ahnung, wie ich sie beschleunigen kann.


    Am besten wäre es, wenn die Methode addAllEvents() im Hintergrund laufen würde. Wie kann ich das anstellen?

    Hallo,


    ich möchte einen wiederholenden Kalendertermin (also einen Kalendertermin mit RRULE) löschen.


    Dieses hier löscht alle wiederholenden Termine:



    Aber ich benötige, dass genau ein Termin von den wiederholenden Terminen gelöscht wird.


    Wie mache ich das? Kann mir jemand helfen?

    Hallo,


    ich versuche einen Kalendertermin aus der CalendarContract.Events Datenbank zu löschen.


    Aber es funktioniert nicht.


    Die Event ID ist definitiv in Ordnung. Die App hat die Berechtigung, Termine zu schreiben und zu lesen.


    Ich lösche den Termin mit folgender Funktion:


    Code
    public void deleteEvent(long eventId) {
            Uri deleteEventUri = Uri.withAppendedPath(Uri.parse(String.format("content://%s/events","com.android.calendar")), String.valueOf(eventId));
            int num = this.c.getContentResolver().delete(deleteEventUri, null, null);
    
    
            System.out.println("Deleted: " + num);
        }


    Als Ausgabe bekomme ich:


    Code
    Deleted: 0


    Der Termin wird nicht gelöscht.


    Warum ist das so?


    Das Hinzufügen von Terminen funktioniert einwandfrei.


    Andere Apps (wie zum Beispiel Google Kalendar, oder aCalendar) können Termine einwandfrei löschen. Hm. Ich bin ratlos.

    Ich glaube, jetzt habe ich die endliche Lösung.


    Das Problem war, dass das Soft Keyboard im Weg war.


    Vor finish() die folgende Funktion aufrufen und es gibt keine Probleme mehr:

    Code
    public static void hideSoftKeyboard(Activity activity) {
            final InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            if (inputMethodManager.isActive()) {
                if (activity.getCurrentFocus() != null) {
                    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
                }
            }
        }

    Nur wenn du Termine in den Kalender einfügst wieso muss da ein layout geladen werden.

    Nun ja, die Stundenanzeige wie im Screenshot (von 7:00 Uhr bis 21:00 Uhr) muss zuerst erstellt werden. Erst DANACH werden die Termine eingetragen.


    Ich brauche ja die Position von zum Beispiel sagen wir mal 12:00 Uhr, wenn ein Termin hinzugefügt werden muss.


    Diese Position hole ich mit:


    Code
    linearlayouts.get(i).getTop()


    Edit: Es funktioniert nicht.

    Das tue ich bereits.


    Ich glaube, das Problem ist einfach, dass während sich die Stundenanzeige aufbaut, sie noch nicht den ganzen Bildschirm füllt.


    Es muss unter Android bestimmt eine Funktion/einen Listener geben, der darauf wartet, bis sich die Anzeige vollständig aufbaut. Erst dann kann ich meine Termine hinzufügen.

    was rufst du denn mit dem intent auf? Wenn du mit fragments arbeitest brauchst du doch eigentlich keinen intent um das Fragment zu tauschen.

    Hallo,


    mit dem Intent rufe ich eine neue Activity auf (siehe Screenshot 2), in der man einen neuen Termin hinzufügen kann.


    Mit Klick auf den Hacken obenrechts wird dieser Codeabschnitt aufgerufen:


    Code
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            switch(requestCode) {
                case 1:
                    System.out.println("Date added");
                    doubleViewPager.getVerticalViewPager().getAdapter().notifyDataSetChanged();
                    break;
            }
        }

    Somit wird der Viewpager aktualisiert mit dem neuen Termin.


    Die Termine sind allerdings falsch angeordnet.

    das sieht so aus als die Termine nicht richtig eingetragen werden. Wenn du den Standard Kalender öffnest u d dort die Termine nachschaust stimmen sie. Oder sind sie da auch falsch.

    Hallo jogimuc,


    nein, dort sind sie richtig.


    Beim Starten meiner App sind die Termine auch richtig eingetragen. Nur wenn ich vom Intent zurückkehre, werden sie falsch dargestellt. Ich rufe dann notifyDataSetChanged() auf, um das Fragment zu aktualsieren.


    Die Termine werden dann mit setMargin() von oben und von links am Bildschirm verschoben.


    Code
    layout.setMargins(x, y, 0, 0);

    Das funktioniert beim Starten meiner App. Aber warum nicht, wenn ich einen neuen Termin eintrage und dann notifyDataSetChanged() aufrufe:



    Was mir aufgefallen ist: Wenn ich vom Intent zurückkehre, sind alle Stundenanzeigen zuerst geschrumpft, erst nach einigen Millisekunden weiten sie sich aus.