Во-первых, имейте в виду, что ListView
— это просто представление списка Objects
. Поэтому, если вы хотите знать, находится ли элемент в ListView
, вам просто нужно проверить, находится ли соответствующий Object
в вашем списке Objects
.
То же самое, когда вы хотите изменить позицию одного элемента, вы должны изменить позицию Object
в списке.
Начните с определения этих объектов:
private ArrayList<MyObject> lists = new ArrayList<MyObject>();
private MyCustomAdapter myAdapter;
В первый раз, когда вы создаете свой ListView
, просто сделайте как обычно:
//fill your list with your objects
lists.add(myObject1);
lists.add(myObject2);
lists.add(myObject3);
//create and set the adapter
myAdapter = new MyCustomAdapter(..., ..., lists);
myListView.setAdapter(myAdapter);
Теперь вы можете узнать, содержит ли ваш lists
определенный объект (это то же самое, что и проверка наличия элемента в вашем ListView
), просто проверив это:
lists.contains(anObject);
Затем, если вы хотите изменить положение определенного элемента в ListView
, вам нужно создать новый список и расположить элементы в правильном порядке. Вы можете использовать что-то вроде этого (не проверено, но должно работать):
private ArrayList<MyObject> moveItemToTop(ArrayList<MyObject> lists, int positionOfItem) {
if (lists == null || positionOfItem < 0 || positionOfItem >= lists.size()) {
return lists;
}
ArrayList<MyObject> sortedList = new ArrayList<MyObject>();
//add the item to the top
sortedList.add(lists.get(positionOfItem));
for (int i=0; i<lists.size(); i++) {
if (i != positionOfItem) {
sortedList.add(lists.get(i));
}
}
return sortedList;
}
Или даже это (что намного проще...).
Наконец, вызовите эти два метода, чтобы обновить ListView
:
myAdapter = new MyCustomAdapter(..., ..., moveItemToTop(lists, itemPosition));
myListView.setAdapter(myAdapter);
person
G.T.
schedule
02.07.2014