final RowScale rs = new RowScale(ChooserRowAdapter.this, 0.f, 1.f)
.setInterpolator(mInterpolator);
mServiceTargetScale[i] = rs;
- rs.startAnimation();
+ }
+
+ // Start the animations in a separate loop.
+ // The process of starting animations will result in
+ // binding views to set up initial values, and we must
+ // have ALL of the new RowScale objects created above before
+ // we get started.
+ for (int i = oldRCount; i < rcount; i++) {
+ mServiceTargetScale[i].startAnimation();
}
}
for (int i = 0; i < mColumnCount; i++) {
final View v = mChooserListAdapter.createView(row);
+ final int column = i;
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- startSelected(holder.itemIndex, false, true);
+ startSelected(holder.itemIndices[column], false, true);
}
});
v.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showAppDetails(
- mChooserListAdapter.resolveInfoForPosition(holder.itemIndex, true));
+ mChooserListAdapter.resolveInfoForPosition(
+ holder.itemIndices[column], true));
return true;
}
});
final View v = holder.cells[i];
if (start + i <= end) {
v.setVisibility(View.VISIBLE);
- holder.itemIndex = start + i;
- mChooserListAdapter.bindView(holder.itemIndex, v);
+ holder.itemIndices[i] = start + i;
+ mChooserListAdapter.bindView(holder.itemIndices[i], v);
} else {
v.setVisibility(View.GONE);
}
final View[] cells;
final ViewGroup row;
int measuredRowHeight;
- int itemIndex;
+ int[] itemIndices;
public RowViewHolder(ViewGroup row, int cellCount) {
this.row = row;
this.cells = new View[cellCount];
+ this.itemIndices = new int[cellCount];
}
public void measure() {
final View v = mChooserRowAdapter.getView(pos, mCachedView, mListView);
int height = ((RowViewHolder) (v.getTag())).measuredRowHeight;
- offset += (int) (height * mChooserRowAdapter.getRowScale(pos) * chooserTargetRows);
+ offset += (int) (height * mChooserRowAdapter.getRowScale(pos));
if (vt >= 0) {
mCachedViewType = vt;