public class SortedList
extends Object
java.lang.Object | |
↳ | android.support.v7.util.SortedList<T> |
一个Sorted列表实现,它可以保持项目的顺序并通知列表中的更改,使其可以绑定到 RecyclerView.Adapter
。
它使用compare(Object, Object)
方法保存项目,并使用二进制搜索来检索项目。 如果您的项目的排序标准可能会发生变化,请确保在编辑时调用适当的方法以避免数据不一致。
您可以通过参数 SortedList.Callback
来控制项目的顺序并更改通知。
Nested classes |
|
---|---|
class |
SortedList.BatchedCallback<T2> 一个回调实现,可以批量通知由SortedList调度的事件。 |
class |
SortedList.Callback<T2> 该类控制着 |
Constants |
|
---|---|
int |
INVALID_POSITION 在列表中找不到项目时,由 |
Public constructors |
|
---|---|
SortedList(Class<T> klass, Callback<T> callback) 创建一个新的T类SortedList。 |
|
SortedList(Class<T> klass, Callback<T> callback, int initialCapacity) 创建一个新的T类SortedList。 |
Public methods |
|
---|---|
int |
add(T item) 将给定的项目添加到列表中。 |
void |
addAll(T... items) 将给定的项目添加到列表中。 |
void |
addAll(Collection<T> items) 将给定的项目添加到列表中。 |
void |
addAll(T[] items, boolean mayModifyInput) 将给定的项目添加到列表中。 |
void |
beginBatchedUpdates() 批量调用此方法直到调用 |
void |
clear() 从SortedList中删除所有项目。 |
void |
endBatchedUpdates() 结束更新事务并将任何剩余事件分派给回调。 |
T |
get(int index) 返回给定索引处的项目。 |
int |
indexOf(T item) 返回提供的项目的位置。 |
void |
recalculatePositionOfItemAt(int index) 此方法可用于重新计算给定索引处项目的位置,而不会触发 |
boolean |
remove(T item) 从列表中删除提供的项目并调用 |
T |
removeItemAt(int index) 删除给定索引处的项目并调用 |
int |
size() 列表中的项目数量。 |
void |
updateItemAt(int index, T item) 更新给定索引处的项目,并在必要时调用 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
int INVALID_POSITION
当他的物品在列表中 indexOf(Object)
时,由 indexOf(Object)
使用。
常量值:-1(0xffffffff)
SortedList (Class<T> klass, Callback<T> callback)
创建一个新的T类SortedList。
Parameters | |
---|---|
klass |
Class : The class of the contents of the SortedList. |
callback |
Callback : The callback that controls the behavior of SortedList. |
SortedList (Class<T> klass, Callback<T> callback, int initialCapacity)
创建一个新的T类SortedList。
Parameters | |
---|---|
klass |
Class : The class of the contents of the SortedList. |
callback |
Callback : The callback that controls the behavior of SortedList. |
initialCapacity |
int : The initial capacity to hold items. |
int add (T item)
将给定的项目添加到列表中。 如果这是一个新项目,SortedList调用onInserted(int, int)
。
如果该项目已经存在于列表中,并且其排序标准未被更改,则将替换为现有项目。 SortedList使用areItemsTheSame(Object, Object)
来检查两个项目是否是相同的项目,并使用areContentsTheSame(Object, Object)
来决定是否应该调用onChanged(int, int)
。 在这两种情况下,即使areContentsTheSame(Object, Object)
返回false,它也会始终删除对旧项目的引用并将新项目放入后备数组中。
如果项目的排序标准被改变,SortedList将无法在列表中找到它的重复项,这将导致列表中的项目重复。 如果您需要更新列表中已存在的项目的排序标准,请使用updateItemAt(int, Object)
。 在更新对象之前,您可以使用indexOf(Object)
找到该项目的索引。
Parameters | |
---|---|
item |
T : The item to be added into the list. |
Returns | |
---|---|
int |
The index of the newly added item. |
void addAll (T... items)
将给定的项目添加到列表中。 不修改输入。
Parameters | |
---|---|
items |
T : Array of items to be added into the list. |
void addAll (Collection<T> items)
将给定的项目添加到列表中。 不修改输入。
Parameters | |
---|---|
items |
Collection : Collection of items to be added into the list. |
void addAll (T[] items, boolean mayModifyInput)
将给定的项目添加到列表中。 相当于在循环中调用add(T)
,除了回调事件可能具有不同的顺序/粒度之外,因为addAll可以对它们进行批处理以获得更好的性能。
如果允许,可以修改输入数组,甚至可以对其进行修改,以避免在排序和重复数据删除期间分配额外的内存。
Parameters | |
---|---|
items |
T : Array of items to be added into the list. |
mayModifyInput |
boolean : If true, SortedList is allowed to modify the input. |
void beginBatchedUpdates ()
批量调用此方法之间发生的适配器更新,直到调用endBatchedUpdates()
。 例如,如果您在一个循环中添加多个项目,并将它们放入连续索引中,则SortedList只会在正确的项目数量下调用onInserted(int, int)
一次。 如果事件不能与前一个事件合并,则先前的事件将立即分派到回调中。
在运行数据更新之后,您 必须调用 endBatchedUpdates()
,它会将任何延迟数据更改事件分派给当前回调。
示例实现可能如下所示:
mSortedList.beginBatchedUpdates(); try { mSortedList.add(item1) mSortedList.add(item2) mSortedList.remove(item3) ... } finally { mSortedList.endBatchedUpdates(); }
您可以使用扩展SortedList.BatchedCallback
的Callback来代替使用此方法批量调用。 在这种情况下,您必须确保在完成数据更改后立即手动拨打dispatchLastEvent()
。 如果不这样做,可能会导致回拨数据不一致。
如果当前回调在 SortedList.BatchedCallback
的实例中,则调用此方法不起作用。
void clear ()
从SortedList中删除所有项目。
void endBatchedUpdates ()
结束更新事务并将任何剩余事件分派给回调。
T get (int index)
返回给定索引处的项目。
Parameters | |
---|---|
index |
int : The index of the item to retrieve. |
Returns | |
---|---|
T |
The item at the given index. |
Throws | |
---|---|
IndexOutOfBoundsException |
if provided index is negative or larger than the size of the list. |
int indexOf (T item)
返回提供的项目的位置。
Parameters | |
---|---|
item |
T : The item to query for position. |
Returns | |
---|---|
int |
The position of the provided item or INVALID_POSITION if item is not in the list. |
void recalculatePositionOfItemAt (int index)
此方法可用于重新计算给定索引处项目的位置,而不会触发 onChanged(int, int)
回调。
如果您正在编辑列表中的对象,以便它们在列表中的位置可能会更改,但不想触发onChange动画,则可以使用此方法重新定位它。 如果项目更改位置,SortedList将调用onMoved(int, int)
而不调用onChanged(int, int)
。
示例用法可能如下所示:
final int position = mSortedList.indexOf(item); item.incrementPriority(); // assume items are sorted by priority mSortedList.recalculatePositionOfItemAt(position);In the example above, because the sorting criteria of the item has been changed, mSortedList.indexOf(item) will not be able to find the item. This is why the code above first gets the position before editing the item, edits it and informs the SortedList that item should be repositioned.
Parameters | |
---|---|
index |
int : The current index of the Item whose position should be re-calculated. |
boolean remove (T item)
从列表中删除提供的项目并调用 onRemoved(int, int)
。
Parameters | |
---|---|
item |
T : The item to be removed from the list. |
Returns | |
---|---|
boolean |
True if item is removed, false if item cannot be found in the list. |
T removeItemAt (int index)
删除给定索引处的项目并调用 onRemoved(int, int)
。
Parameters | |
---|---|
index |
int : The index of the item to be removed. |
Returns | |
---|---|
T |
The removed item. |
int size ()
列表中的项目数量。
Returns | |
---|---|
int |
The number of items in the list. |
void updateItemAt (int index, T item)
更新给定索引处的项目,并在必要时调用 onChanged(int, int)
和/或 onMoved(int, int)
。
如果您需要更改现有项目以使其列表中的位置可能更改,则可以使用此方法。
如果新对象是不同的对象( get(index) != item
)并且 areContentsTheSame(Object, Object)
返回 true
,则SortedList避免调用 onChanged(int, int)
否则它将调用 onChanged(int, int)
。
如果该项目的新位置不同于提供的 index
,则SortedList调用 onMoved(int, int)
。
Parameters | |
---|---|
index |
int : The index of the item to replace |
item |
T : The item to replace the item at the given Index. |
也可以看看: