Most visited

Recently visited

SortedList

public class SortedList
extends Object

java.lang.Object
   ↳ android.support.v7.util.SortedList<T>


一个Sorted列表实现,它可以保持项目的顺序并通知列表中的更改,使其可以绑定到 RecyclerView.Adapter

它使用compare(Object, Object)方法保存项目,并使用二进制搜索来检索项目。 如果您的项目的排序标准可能会发生变化,请确保在编辑时调用适当的方法以避免数据不一致。

您可以通过参数 SortedList.Callback来控制项目的顺序并更改通知。

Summary

Nested classes

class SortedList.BatchedCallback<T2>

一个回调实现,可以批量通知由SortedList调度的事件。

class SortedList.Callback<T2>

该类控制着SortedList的行为。

Constants

int INVALID_POSITION

在列表中找不到项目时,由 indexOf(Object)使用。

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()

批量调用此方法直到调用 endBatchedUpdates()之间发生的适配器更新。

void clear()

从SortedList中删除所有项目。

void endBatchedUpdates()

结束更新事务并将任何剩余事件分派给回调。

T get(int index)

返回给定索引处的项目。

int indexOf(T item)

返回提供的项目的位置。

void recalculatePositionOfItemAt(int index)

此方法可用于重新计算给定索引处项目的位置,而不会触发 onChanged(int, int)回调。

boolean remove(T item)

从列表中删除提供的项目并调用 onRemoved(int, int)

T removeItemAt(int index)

删除给定索引处的项目并调用 onRemoved(int, int)

int size()

列表中的项目数量。

void updateItemAt(int index, T item)

更新给定索引处的项目,并在必要时调用 onChanged(int, int)和/或 onMoved(int, int)

Inherited methods

From class java.lang.Object

Constants

INVALID_POSITION

int INVALID_POSITION

当他的物品在列表中 indexOf(Object)时,由 indexOf(Object)使用。

常量值:-1(0xffffffff)

Public constructors

SortedList

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

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.

Public methods

add

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.

也可以看看:

addAll

void addAll (T... items)

将给定的项目添加到列表中。 不修改输入。

Parameters
items T: Array of items to be added into the list.

也可以看看:

addAll

void addAll (Collection<T> items)

将给定的项目添加到列表中。 不修改输入。

Parameters
items Collection: Collection of items to be added into the list.

也可以看看:

addAll

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.

也可以看看:

beginBatchedUpdates

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的实例中,则调用此方法不起作用。

clear

void clear ()

从SortedList中删除所有项目。

endBatchedUpdates

void endBatchedUpdates ()

结束更新事务并将任何剩余事件分派给回调。

get

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.

indexOf

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.

recalculatePositionOfItemAt

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.

也可以看看:

remove

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.

removeItemAt

T removeItemAt (int index)

删除给定索引处的项目并调用 onRemoved(int, int)

Parameters
index int: The index of the item to be removed.
Returns
T The removed item.

size

int size ()

列表中的项目数量。

Returns
int The number of items in the list.

updateItemAt

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.

也可以看看:

Hooray!