2014-03-28 79 views
5

以下ArrayList填充ArrayAdapter。如何切換ArrayList中的元素

List<String> hold_people = new ArrayList<String>(); 

hold_people.add("Frank"); 
hold_people.add("Bob"); 
hold_people.add("Tom"); 
hold_people.add("Alice"); 
hold_people.add("Glen"); 

弗蘭克是第一個位置。但用戶希望首先看到Alice。如何將Alice移動到第一個位置?

我無法按字母順序對其進行排序,因爲我必須根據用戶請求保持特定順序。

+0

你想整理你的清單嗎? –

+0

我不想對它進行排序。 – user3134565

+1

使用'set(index,Obj)' –

回答

2

使用Collections.swap(List<?> list, int i, int j)

互換在指定列表中指定位置的元素。 (如果指定的位置是相等的,調用此方法離開 列表不變。)

使用Collections.rotate(List<?> list, int distance)

旋轉通過指定的距離在指定列表中的元素。 調用此方法後,對於位於0和list.size() - 1(含)之間的所有 i,索引i處的元素將是先前在索引(i - 距離)mod list.size()處的元素 。 (此方法對列表大小沒有影響 )。

6

您可以使用Collections.swap

Collections.swap(hold_people, 0, hold_people.indexOf("Alice")); 

這將交換列表中第一個元素與"Alice"

請注意,如果您的列表中沒有字符串"Alice",則可以返回hold_people.indexOf("Alice"),因此您可以檢查列表中是否包含該字符串。

int index = hold_people.indexOf("Alice"); 
if(index != -1) 
    Collections.swap(hold_people, 0, index); 
+0

這不起作用,因爲現在弗蘭克走了。 – user3134565

+0

@ user3134565爲我工作:http://ideone.com/y5vVi1。確保在適配器中進行更改時正確更新了列表視圖。 –

0

如果你不想使用集合某種原因,你可以做

String temp = hold_people.get(0); 
int i = hold_people.indexOf("Alice"); 
hold_people.set(0,"Alice"); 
hold_people.set(i, temp); 

這將取決於你要交換哪一個改變,但其基本思想是存在的。