【发布时间】:2016-09-10 15:14:55
【问题描述】:
我正在尝试扩展 recyclerview 中的卡片视图。我得到了扩展部分的工作,但是当向它添加过渡时,开始出现一些视觉错误。当没有屏幕外项目时,过渡效果很好,但是当我向回收站视图添加超过(在我的情况下)4 个项目时,它开始发生。
当我禁用过渡动画时,卡片视图扩展可以很好地处理超过 4 个项目。我认为问题与职位变动有关,但我找不到任何解决问题的方法。
我用来实现卡片视图扩展的指南可以在这里找到:https://stackoverflow.com/a/38623873/6673949
还有我完整的 recyclerview 适配器
public class BasketRecyclerAdapter extends RecyclerView.Adapter<BasketRecyclerAdapter.CustomViewHolder> {
private String letter;
private Context mContext;
private ColorGenerator generator = ColorGenerator.MATERIAL;
private List<Basket> baskets;
private int mExpandedPosition = -1;
private RecyclerView r1;
public BasketRecyclerAdapter(Context context, List<Basket> baskets, RecyclerView r1) {
this.mContext = context;
this.baskets = baskets;
this.r1 = r1;
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.basket_menu_item, null);
CustomViewHolder viewHolder = new CustomViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final BasketRecyclerAdapter.CustomViewHolder holder, final int position) {
String basketName = baskets.get(position).getBasketName();
holder.basketName.setText(basketName);
letter = "" + basketName.charAt(0);
TextDrawable drawable = TextDrawable.builder()
.buildRound(letter, generator.getColor(basketName));
holder.imageLetter.setImageDrawable(drawable);
final boolean isExpanded = position == mExpandedPosition;
holder.expandedLayout.setVisibility(isExpanded?View.VISIBLE:View.GONE);
holder.itemView.setActivated(isExpanded);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mExpandedPosition = isExpanded ? -1:position;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
TransitionManager.beginDelayedTransition(r1);
}
notifyDataSetChanged();
}
});
}
可以做些什么来解决这个问题?谢谢。
编辑:我试图通过仅使用 ListView 而不是 RecyclerView 来使其工作,但 ListView 适配器不会使用相同的代码进行扩展 - 将尝试找出原因。
Edit2:通过使用另一个名为“ExpandableLayout”的库让它工作,但似乎仍然无法弄清楚为什么没有其他库它就不能工作。
【问题讨论】:
-
考虑 TransitionManager.beginDelayedTransition(r1); 到 TransitionManager.beginDelayedTransition(
);
标签: android animation position android-recyclerview