am 891a7ee6: am e9bb596c: Merge "Synchronize selected item data on-demand after data set invalidation" into mnc-dev
* commit '891a7ee666eafbfda8c36e339ce5bbed6b312f3c': Synchronize selected item data on-demand after data set invalidation
This commit is contained in:
@@ -5308,6 +5308,13 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void syncSelectedItem() {
|
||||
if (mDataChanged) {
|
||||
layoutChildren();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleDataChanged() {
|
||||
int count = mItemCount;
|
||||
|
||||
@@ -551,37 +551,67 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the position of the currently selected item within the adapter's data set
|
||||
* Returns the position of the currently selected item within the adapter's
|
||||
* data set, or {@link #INVALID_POSITION} if there is nothing selected.
|
||||
* <p>
|
||||
* <strong>Note:</strong> Prior to {@link android.os.Build.VERSION_CODES#MNC},
|
||||
* calling this method between an adapter data set change and a subsequent
|
||||
* layout pass could return invalid data.
|
||||
*
|
||||
* @return int Position (starting at 0), or {@link #INVALID_POSITION} if there is nothing selected.
|
||||
* @return the selected item's position (starting at 0), or
|
||||
* {@link #INVALID_POSITION} if there is nothing selected
|
||||
*/
|
||||
@ViewDebug.CapturedViewProperty
|
||||
public int getSelectedItemPosition() {
|
||||
syncSelectedItem();
|
||||
return mNextSelectedPosition;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The id corresponding to the currently selected item, or {@link #INVALID_ROW_ID}
|
||||
* if nothing is selected.
|
||||
* Returns the row ID corresponding to the currently selected item, or
|
||||
* {@link #INVALID_ROW_ID} if nothing is selected.
|
||||
* <p>
|
||||
* <strong>Note:</strong> Prior to {@link android.os.Build.VERSION_CODES#MNC},
|
||||
* calling this method between an adapter data set change and a subsequent
|
||||
* layout pass could return invalid data.
|
||||
*
|
||||
* @return the selected item's row ID, or {@link #INVALID_ROW_ID} if
|
||||
* nothing is selected
|
||||
*/
|
||||
@ViewDebug.CapturedViewProperty
|
||||
public long getSelectedItemId() {
|
||||
syncSelectedItem();
|
||||
return mNextSelectedRowId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The view corresponding to the currently selected item, or null
|
||||
* if nothing is selected
|
||||
* Returns the view corresponding to the currently selected item, or
|
||||
* {@code null} if nothing is selected.
|
||||
* <p>
|
||||
* <strong>Note:</strong> Prior to {@link android.os.Build.VERSION_CODES#MNC},
|
||||
* calling this method between an adapter data set change and a subsequent
|
||||
* layout pass could return inconsistent data.
|
||||
*
|
||||
* @return the selected item's view, or {@code null} if nothing is selected
|
||||
*/
|
||||
@Nullable
|
||||
public abstract View getSelectedView();
|
||||
|
||||
/**
|
||||
* @return The data corresponding to the currently selected item, or
|
||||
* null if there is nothing selected.
|
||||
* Returns the data corresponding to the currently selected item, or
|
||||
* {@code null} if nothing is selected.
|
||||
* <p>
|
||||
* <strong>Note:</strong> Prior to {@link android.os.Build.VERSION_CODES#MNC},
|
||||
* calling this method between an adapter data set change and a subsequent
|
||||
* layout pass could return inconsistent data.
|
||||
*
|
||||
* @return the data corresponding to the currently selected item, or
|
||||
* {@code null} if there is nothing selected.
|
||||
*/
|
||||
@Nullable
|
||||
public Object getSelectedItem() {
|
||||
T adapter = getAdapter();
|
||||
int selection = getSelectedItemPosition();
|
||||
final T adapter = getAdapter();
|
||||
final int selection = getSelectedItemPosition();
|
||||
if (adapter != null && adapter.getCount() > 0 && selection >= 0) {
|
||||
return adapter.getItem(selection);
|
||||
} else {
|
||||
@@ -589,6 +619,15 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronizes the selected item's position and ID, if necessary.
|
||||
*/
|
||||
void syncSelectedItem() {
|
||||
if (mDataChanged) {
|
||||
onLayout(false, mLeft, mTop, mRight, mBottom);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The number of items owned by the Adapter associated with this
|
||||
* AdapterView. (This is the number of data items, which may be
|
||||
|
||||
Reference in New Issue
Block a user