Announcement

Collapse
No announcement yet.

[ANDROID STUDIO] Element im GridView aktualisieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [ANDROID STUDIO] Element im GridView aktualisieren

    Hey Leute,

    da ich mich kurz halten möchte. Hier eine kurze Zusammenfassung:

    Die erste Activity hat einen NumberPicker und die gewählte Nummer wird an die nächste Activity weitergegeben. Dort habe ich eine GridView und beim ersten Durchlauf erzeugt der Code eine ArrayList mit Elementen "PlayerX" (X = eine Zahl von 1 bis zum Wert aus dem NumberPicker)

    Alles funktioniert gut, aber ich kann die Werte nicht aktualisieren.

    Wenn der Benutzer auf einen Namen klickt (z.B. "Player2"), öffnet sich ein AlertDialog mit dem Namen im Titel und einem EditText. Nach dem Bestätigen des neuen Namens mit dem Positiv-Button wird der neue Name gespeichert, aber nicht in der Grid-Ansicht angezeigt. Wenn ich erneut auf den gleichen Namen ("Player2") klicke, wird der neue Name jedoch im Titel des AlertBuilders angezeigt. Später in der App, steht aber wieder Player2 und nicht der neu eingegebene Name.

    Der gesamte Code läuft im CustomAdapter. Hier der Code:
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    convertView.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View view) {
    //um tastatur automatisch zu öffnen und schließen
    final InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD _SERVICE);

    //andere Listview
    LayoutInflater linf = LayoutInflater.from(getContext());
    final View inflator = linf.inflate(R.layout.builder_window, null);

    AlertDialog.Builder alert = new AlertDialog.Builder(getContext());
    alert.setTitle(birdList.get(position));
    alert.setView(inflator);

    final EditText et1 = (EditText) inflator.findViewById(R.id.edit_name);

    alert.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
    String s1=et1.getText().toString();

    adapter.remove(birdList.get(position));
    adapter.insert(s1, position);
    adapter.notifyDataSetChanged(); } });
    alert.setNegativeButton("Delete", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) {

    adapter.remove(birdList.get(position));
    adapter.notifyDataSetChanged();
    }
    });

    alert.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
    dialog.cancel();
    }
    });
    alert.show();
    }

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Sorry weiß leider nicht, wie man einen code einfügt.

    Das funktioniert aber relativ problemlos beim Löschen. Dort wird die Liste nach dem Drücken des "Delete"Knopfes aktualisiert und löscht einen Wert (aber den letzten und nicht den ausgewählten)



    Bitte, könnt ihr mir helfen? Ich mache jetzt an dem blöden Problem schon etliche Stunden rum und komme einfach auf kein Ergebnis...

    Danke im Voraus

  • #2
    Würde mal debuggen und die Variable 'position' prüfen. Für beide Probleme scheint es so zu sein, das diese einen falschen Wert hat
    Christian

    Comment


    • #3
      Danke für die Antwort! Habe die position mal gedebugged - kam aber irgendwie kein wirklicher Fehler raus. Die Position, die beim Klick übergeben wird, stimmt. Wenn ich zB den Wert von Player3 ändere und danach wieder auf Player3 drucke, dann steht im AlertDialog der neu eingegeben Name drin. Es wird lediglich nicht aktuallisiert (in der GridView "Liste") und danach wieder an die nächste Activity weitergegeben.

      Comment


      • #4
        Wenn dein Code bei

        adapter.remove(birdList.get(position));
        adapter.notifyDataSetChanged();

        delete das nicht richtig verarbeiten kann, ist die position falsch
        Christian

        Comment


        • #5
          Sorry für die späte Antwort.
          Die Position sollte stimmen. Das einzige Problem ist, dass der GridView nicht aktuallierst wird.

          Wenn ich bspw Player4 lösche, dann wird im Gridview zwar Player10 rausgeschmissen, aber wenn ich auf Player9 (der nach dem Löschen dann auf der letzten Position ist) drücke, steht dran, dass es Player10 ist.
          Es wird also Player4 gelöscht, nur übernimmt mein GridView dieses Update nicht. Gleiches gilt beim Ändern des Namens.

          Comment


          • #6
            https://stackoverflow.com/questions/...esh-a-gridview
            adapter.notifyDataChanged();
            grid.invalidateViews();
            grid.setAdapter(adapter);
            Christian

            Comment


            • #7
              Das ist es! Vielen Dank.
              Habe das jetzt einfach in die onClick methode gepackt und es funktioniert. Mega!

              Comment

              Working...
              X