여러가지 방법이 있을 것 같긴한데, 간단한 방법은 List를 받아서 포지션에 따른 아이템을 리턴하는 클래스를 만드는 겁니다.
public class CircularIterator<T> {
private int currentPosition = 0;
private final List<T> items;
public CircularIterator(List<T> items) {
this.items = items;
}
private int lastIndex() {
return items.size() - 1;
}
public T currentItem() {
return items.get(currentPosition);
}
public boolean hasNext() {
return currentPosition < lastIndex();
}
public T next() {
if (hasNext()) {
currentPosition++;
return currentItem();
}
currentPosition = 0;
return currentItem();
}
public boolean hasPrevious() {
return currentPosition > 0;
}
public T previous() {
if (hasPrevious()) {
currentPosition--;
return currentItem();
}
currentPosition = lastIndex();
return currentItem();
}
public int nextIndex() {
return currentPosition + 1;
}
public int previousIndex() {
return currentPosition - 1;
}
}
public class CircularIteratorTest {
final CircularIterator it = new CircularIterator(Arrays.asList("text1", "text2", "text3", "text4", "text5"));
@Test
public void testIterator() {
assertEquals("text1", it.currentItem());
assertEquals("text2", it.next());
assertEquals("text3", it.next());
assertEquals("text4", it.next());
assertEquals("text5", it.next());
assertEquals("text1", it.next());
assertEquals("text2", it.next());
assertEquals("text2", it.currentItem());
assertEquals("text1", it.previous());
assertEquals("text1", it.currentItem());
assertEquals("text5", it.previous());
assertEquals("text4", it.previous());
assertEquals("text3", it.previous());
assertEquals("text2", it.previous());
}
}
님의 rigtButton의 클릭이벤트에서
private final CircularIterator<String> textIterator = new CircularIterator<>(
Arrays.asList(getStringArray(R.array.array))
);
leftButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
displayText(textIterator.previous());
}
});
rigtButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
displayText(textIterator.next());
}
});
더 좋은 방법도 분명히 있을 겁니다. 암튼 도움이 되시길...