Umbrechen einer ArrayList
Ich bin versucht, zu erstellen eine einfache Paginierung routine für Werte statt in einem ArrayList
. Im Grunde, was ich tun wollen ist machen Sie den ersten fünf Elemente in der ArrayList
auf Anhieb. Und dann, wenn Benutzer klicken Sie auf Next (increment by another 5)
und Previous (decrease by 5)
.
Meine Logik sieht so aus:
class foo
{
private static final int defaultStep = 5;
private int moveCounter;
private List<String> values;
public foo()
{
values = new ArrayList<String>();
values.add("Fiber Channel");
values.add("Copper Channel");
...
}
private void pageNext()
{
if (moveCounter > -1 && moveCounter < values.size())
{
int currentIndex = (moveCounter + 1);
renderValues(currentIndex, false);
}
}
private void pagePrevious()
{
if (moveCounter > -1 && moveCounter <= values.size())
{
renderValues(moveCounter-1, true);
}
}
private void renderValues(int startIndex, boolean isPreviousCall)
{
if (startIndex > -1)
{
StringBuilder html = new StringBuilder();
List<String> valuesToRender = new ArrayList<String>();
int checkSteps = 1;
while (startIndex < values.size())
{
valuesToRender.add(values.get(startIndex));
if (checkSteps == defaultStep) break;
startIndex++;
checkSteps++;
}
moveCounter = startIndex;
//TODO: Build html String
...
}
}
}
Ich habe ein Problem mit pagePrevious
nennen, könnt Ihr mir helfen, die valuesToRender
5-Schritte bis values array
vor dem hinzufügen des Werts zu machen, um die valuesToRender
array.
Ich habe versucht, etwas zu tun, wie auch dieses:
for (int start = startIndex, end = values.size() - 1; start < end; start++, end--)
{
if (isPreviousCall) valuesToRender.add(values.get(end));
else valuesToRender.add(values.get(start));
if (checkSteps == defaultStep) break;
checkSteps++;
}
Aber das scheint nicht zu funktionieren, weder noch. Können Sie Kerle Stelle und mir helfen, dieses Problem zu beheben.
Danke Jungs.
- Überprüfen Sie diese. Es kann dir helfen - stackoverflow.com/questions/8755619/java-arraylist-navigation
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde es so machen:
Ich bin mir nicht sicher, was renderValues tut, und ob wir zu subtrahieren 1 oder vielleicht defaultStep aus der oberen Grenze der moveCounter.
Den ersten 3 Zeilen werden konnte, gepackt in zwei große ternären experssions etwa so:
aber die 3-Zeilen-Lösung ist besser zu Folgen.
renderValues(..)
bleiben, wie es ist oder Sie denken, dass die zweite option steht passen - oder vielleicht ändern muss?!Ändern
zu
Basierend auf "pscuderi" Lösung hier
Ich habe gebaut, ein wrapping-Klasse, die hilfreich sein können für jemanden, der sich für diese: