/* * Copyright 2013 Niek Haarman * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.haarman.listviewanimations; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import android.widget.BaseAdapter; /** * A true ArrayList adapter providing access to all ArrayList methods. */ public abstract class ArrayAdapter<T> extends BaseAdapter { private ArrayList<T> mItems; /** * Creates a new ArrayAdapter with an empty list. */ public ArrayAdapter() { this(null); } /** * Creates a new ArrayAdapter with the specified list, or an empty list if * items == null. */ public ArrayAdapter(ArrayList<T> items) { if (items != null) { mItems = items; } else { mItems = new ArrayList<T>(); } } @Override public int getCount() { return mItems.size(); } @Override public T getItem(int position) { return mItems.get(position); } @Override public long getItemId(int position) { return position; } /** * Appends the specified element to the end of the list. */ public void add(T item) { mItems.add(item); notifyDataSetChanged(); } /** * Inserts the specified element at the specified position in the list. */ public void add(int position, T item) { mItems.add(position, item); notifyDataSetChanged(); } /** * Appends all of the elements in the specified collection to the end of the * list, in the order that they are returned by the specified collection's * Iterator. */ public void addAll(Collection<? extends T> items) { mItems.addAll(items); notifyDataSetChanged(); } /** * Appends all of the elements to the end of the list, in the order that * they are specified. */ public void addAll(T... items) { for (T item : items) { mItems.add(item); } notifyDataSetChanged(); } /** * Inserts all of the elements in the specified collection into the list, * starting at the specified position. */ public void addAll(int position, Collection<? extends T> items) { mItems.addAll(position, items); notifyDataSetChanged(); } /** * Inserts all of the elements into the list, starting at the specified * position. */ public void addAll(int position, T... items) { for (int i = position; i < (items.length + position); i++) { mItems.add(i, items[i]); } notifyDataSetChanged(); } /** * Removes all of the elements from the list. */ public void clear() { mItems.clear(); notifyDataSetChanged(); } /** * Replaces the element at the specified position in this list with the * specified element. */ public void set(int position, T item) { mItems.set(position, item); notifyDataSetChanged(); } /** * Removes the specified element from the list */ public void remove(T item) { mItems.remove(item); notifyDataSetChanged(); } /** * Removes the element at the specified position in the list */ public void remove(int position) { mItems.remove(position); notifyDataSetChanged(); } /** * Removes all elements at the specified positions in the list */ public void removePositions(Collection<Integer> positions) { ArrayList<Integer> positionsList = new ArrayList<Integer>(positions); Collections.sort(positionsList); Collections.reverse(positionsList); for (int position : positionsList) { mItems.remove(position); } notifyDataSetChanged(); } /** * Removes all of the list's elements that are also contained in the * specified collection */ public void removeAll(Collection<T> items) { mItems.removeAll(items); notifyDataSetChanged(); } /** * Retains only the elements in the list that are contained in the specified * collection */ public void retainAll(Collection<T> items) { mItems.retainAll(items); notifyDataSetChanged(); } /** * Returns the position of the first occurrence of the specified element in * this list, or -1 if this list does not contain the element. More * formally, returns the lowest position <tt>i</tt> such that * <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>, * or -1 if there is no such position. */ public int indexOf(T item) { return mItems.indexOf(item); } }