Hinzufügen von Ansichten in einer bestimmten Reihenfolge und Speichern dieser Reihenfolge

8

Ich habe einen 'add' Button und ein GridLayout mit 6 Slots drin, wenn ich auf 'add' klicke, wird view1 in das gridlayout eingefügt, ich klicke erneut auf den 'add' Button, view2 wird hinzugefügt und so weiter .

%Vor%

Nachdem eine Ansicht hinzugefügt wurde, überprüfe ich, ob ihr Text bereits in sharedPrefs hinzugefügt wurde, damit sie beim erneuten Erstellen der Aktivität automatisch hinzugefügt werden können.

%Vor%

Mein Problem ist, wenn ich view1 entferne und es dann erneut hinzufüge, wird es in den letzten Slot eingefügt, so wie ich es möchte, aber wenn ich die Aktivität neu erstelle, wird es auf den ersten Platz zurückgehen, weil der Code kommt Lesen Sie in der Reihenfolge, in der die Ansichten in ihrer ursprünglichen Reihenfolge hinzugefügt werden.

Ich möchte die Ansichten hinzufügen, wenn die Aktivität in der Reihenfolge neu erstellt wird, in der sie vor dem Abschluss der Aktivität waren. Dies kann eine einfache logische Lösung sein, oder ich nähere mich dem Problem sehr falsch, in jedem Fall ist Hilfe nötig!

    
John Sardinha 29.04.2016, 21:40
quelle

5 Antworten

2

Als Erstes könnten Sie die Sichten-Tags "oder was auch immer Sie sie markieren" in einer Datenstruktur speichern, die ein Tag und die Position, in der sich die Ansicht befindet, enthält, und den Code dann in SharedPreferences speichern.

%Vor%

Wenn Sie die Datenstruktur wie oben beschrieben abrufen, können Sie die Ergebnisse anhand ihrer Positionen anhand des folgenden Codes sortieren:

%Vor%

Dann iteriere über die sortierten Ergebnisse in dataStructure und füge die Views der GridLayout in der richtigen Reihenfolge hinzu.

    
kareem adel 14.05.2016 15:34
quelle
1

Das Problem (zumindest von dem, was ich aus Ihrer Frage verstanden habe) ist, dass Sie in den Einstellungen keine Art von Indikator für die Position der Ansicht in ihrem Elternelement speichern. Momentan gibt es keinen Unterschied zwischen dem Hinzufügen zum ersten Mal und dem Hinzufügen der Ansicht nach dem Löschen oder dem Hinzufügen der Ansicht in Slot 1 oder Slot 5 (zum Beispiel). Eine Möglichkeit, dies zu umgehen, wäre, einen Eintrag in den Einstellungen für jeden dieser Slots zu haben und dann in diesen Slot-Einstellungen den View-Indikator zu speichern:

Zum Beispiel:

%Vor%

Wenn Sie die Aktivität neu erstellen, sehen Sie sich alle SLOT-Einstellungen an und sehen Sie, welche Werte sie enthalten. Sie könnten null sein, wenn Ihr Layout Löcher zulässt (z. B. keine Ansicht für Slot 2, aber eine Ansicht für Slot 1 und 3) oder eine Ihrer text * Variablen enthalten könnte, die angibt, welche Ansicht in diesem Slot platziert werden soll:

%Vor%     
Luksprog 09.05.2016 11:12
quelle
1

Dies führt dazu, dass Elemente in ein sortiertes Array eingefügt werden. Es gibt eine Methode addView(View child, int index) , die die Ansicht an der gewünschten Position hinzufügt, die Sie verwenden möchten. Sie müssen über die aktuell hinzugefügten untergeordneten Elemente iterieren und den richtigen Index finden, um das neue einzufügen. Wenn Sie jede Ansicht mit ihrem Wert versehen, bevor Sie sie hinzufügen, können Sie anhand der Tags feststellen, wo sich dieser Index befindet.

%Vor%

Wenn Sie dann ein Layout einfügen müssen, können Sie dies tun:

%Vor%

Dies sollte sicherstellen, dass Ihre Ansichten immer in der richtigen Reihenfolge sind. Es könnte weiter optimiert werden, indem eine binäre Suche implementiert wird, aber wenn Sie so viele Ansichten haben, sollten Sie sowieso eine ListView verwenden.

Sie sollten diese Architektur jedoch möglicherweise völlig überdenken, da Sie viel redundanten Code haben, der mit einer Schleifen- oder Datenstruktur vereinfacht werden kann. Alternativ könnten Sie immer alle Ansichten hinzufügen und einfach theLayout.setVisibility(View.GONE) aufrufen, wenn Sie eine ausblenden möchten und theLayout.setVisibility(View.VISIBLE) , wenn Sie sie anzeigen möchten.

    
Jschools 11.05.2016 16:46
quelle
1

Ich würde so etwas mit JsonArray

umgehen

Wenn Sie eine Ansicht hinzufügen, fügen Sie diesen Text in das json-Array ein und speichern Sie ihn dann in Ihrer gemeinsamen Einstellung als Zeichenfolge.

%Vor%

Sie können Elemente problemlos hinzufügen und entfernen, wenn Ihre Ansichten entfernt oder hinzugefügt werden. Auch dies hilft Ihnen, nur eine gemeinsame Einstellung zu haben und das Arbeiten mit verschiedenen gemeinsamen Einstellungen zu verhindern.

%Vor%     
Omid Heshmatinia 12.05.2016 04:03
quelle
0

Sie sollten den Namen den Namen Ihres Layouts + einen Zähler speichern. Ex : Layout1, Layout2, Layout3 ...

Wenn Sie sie in der Reihenfolge abrufen möchten, müssen Sie nur eine Schleife ausführen, bis Sie nichts mehr abrufen können:

%Vor%

Ich hoffe, es hilft!

    
GuillaumeAgis 09.05.2016 14:11
quelle

Tags und Links