Fix StickyHeader measuring.

It didn't re-measure when pulling an item from the cache, screwing stuff
up after a phone rotation. Had a workaround for it for specific screens,
but this fixes the problem at the source.

Fixes #8583
This commit is contained in:
Greyson Parrelli 2018-06-14 11:34:10 -07:00
parent c9a0a66f18
commit a3768c7d74
2 changed files with 20 additions and 34 deletions

View File

@ -121,16 +121,6 @@ public class SearchFragment extends Fragment implements SearchListAdapter.EventL
});
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (listDecoration != null) {
listDecoration.invalidateLayouts();
}
}
@Override
public void onConversationClicked(@NonNull ThreadRecord threadRecord) {
ConversationListActivity conversationList = (ConversationListActivity) getActivity();

View File

@ -76,14 +76,17 @@ public class StickyHeaderDecoration extends RecyclerView.ItemDecoration {
protected ViewHolder getHeader(RecyclerView parent, StickyHeaderAdapter adapter, int position) {
final long key = adapter.getHeaderId(position);
if (headerCache.containsKey(key)) {
return headerCache.get(key);
} else {
final ViewHolder holder = adapter.onCreateHeaderViewHolder(parent);
final View header = holder.itemView;
ViewHolder headerHolder = headerCache.get(key);
if (headerHolder == null) {
headerHolder = adapter.onCreateHeaderViewHolder(parent);
//noinspection unchecked
adapter.onBindHeaderViewHolder(holder, position);
adapter.onBindHeaderViewHolder(headerHolder, position);
headerCache.put(key, headerHolder);
}
final View header = headerHolder.itemView;
int widthSpec = View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY);
int heightSpec = View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.UNSPECIFIED);
@ -96,10 +99,7 @@ public class StickyHeaderDecoration extends RecyclerView.ItemDecoration {
header.measure(childWidth, childHeight);
header.layout(0, 0, header.getMeasuredWidth(), header.getMeasuredHeight());
headerCache.put(key, holder);
return holder;
}
return headerHolder;
}
/**
@ -180,10 +180,6 @@ public class StickyHeaderDecoration extends RecyclerView.ItemDecoration {
((LinearLayoutManager)parent.getLayoutManager()).getReverseLayout();
}
public void invalidateLayouts() {
headerCache.clear();
}
/**
* The adapter to assist the {@link StickyHeaderDecoration} in creating and binding the header views.
*