Merge "Synchronize selected item data on-demand after data set invalidation" into mnc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e9bb596cc8
@@ -5308,6 +5308,13 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void syncSelectedItem() {
|
||||||
|
if (mDataChanged) {
|
||||||
|
layoutChildren();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleDataChanged() {
|
protected void handleDataChanged() {
|
||||||
int count = mItemCount;
|
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
|
@ViewDebug.CapturedViewProperty
|
||||||
public int getSelectedItemPosition() {
|
public int getSelectedItemPosition() {
|
||||||
|
syncSelectedItem();
|
||||||
return mNextSelectedPosition;
|
return mNextSelectedPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The id corresponding to the currently selected item, or {@link #INVALID_ROW_ID}
|
* Returns the row ID corresponding to the currently selected item, or
|
||||||
* if nothing is selected.
|
* {@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
|
@ViewDebug.CapturedViewProperty
|
||||||
public long getSelectedItemId() {
|
public long getSelectedItemId() {
|
||||||
|
syncSelectedItem();
|
||||||
return mNextSelectedRowId;
|
return mNextSelectedRowId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The view corresponding to the currently selected item, or null
|
* Returns the view corresponding to the currently selected item, or
|
||||||
* if nothing is selected
|
* {@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();
|
public abstract View getSelectedView();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The data corresponding to the currently selected item, or
|
* Returns the data corresponding to the currently selected item, or
|
||||||
* null if there is nothing selected.
|
* {@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() {
|
public Object getSelectedItem() {
|
||||||
T adapter = getAdapter();
|
final T adapter = getAdapter();
|
||||||
int selection = getSelectedItemPosition();
|
final int selection = getSelectedItemPosition();
|
||||||
if (adapter != null && adapter.getCount() > 0 && selection >= 0) {
|
if (adapter != null && adapter.getCount() > 0 && selection >= 0) {
|
||||||
return adapter.getItem(selection);
|
return adapter.getItem(selection);
|
||||||
} else {
|
} 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
|
* @return The number of items owned by the Adapter associated with this
|
||||||
* AdapterView. (This is the number of data items, which may be
|
* AdapterView. (This is the number of data items, which may be
|
||||||
|
|||||||
Reference in New Issue
Block a user