Make sure right view is selected as anchor on "more"-expansion

This commit is contained in:
mvp76 2016-12-06 09:44:46 +01:00
parent 734741c8f4
commit 65b16beb61

View File

@ -317,14 +317,11 @@ public class AppDetailsRecyclerViewAdapter
descriptionMoreView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Remember current scroll position so that we can restore it
LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager();
int pos = lm.findFirstVisibleItemPosition();
int posOffset = 0;
if (pos != RecyclerView.NO_POSITION) {
View firstChild = recyclerView.getChildAt(0);
posOffset = (firstChild == null) ? 0 : (firstChild.getTop()); // - recyclerView.getPaddingTop());
}
// Make this "header section" the focused child, so that RecyclerView will use
// it as the anchor in the layout process. Otherwise the RV might select another
// view as the anchor, resulting in that the top of this view is instead scrolled
// off the screen. Refer to LinearLayoutManager.updateAnchorFromChildren(...).
recyclerView.requestChildFocus(itemView, itemView);
if (TextViewCompat.getMaxLines(descriptionView) != MAX_LINES) {
descriptionView.setMaxLines(MAX_LINES);
descriptionMoreView.setText(R.string.more);
@ -332,10 +329,6 @@ public class AppDetailsRecyclerViewAdapter
descriptionView.setMaxLines(Integer.MAX_VALUE);
descriptionMoreView.setText(R.string.less);
}
if (pos != RecyclerView.NO_POSITION) {
// Restore scroll position
lm.scrollToPositionWithOffset(pos, posOffset);
}
}
});
// Set ALL caps (in a way compatible with SDK 10)