Android recyclerview 动画问题

标签 android animation position android-recyclerview

我正在尝试扩展 recyclerview 中的卡片 View 。我使扩展部分正常工作,但是在向其添加过渡时,开始出现一些视觉错误。当没有屏幕外项目时,转换工作正常,但当我向回收站 View 添加超过(在我的情况下)4 个项目时,它开始发生。

GIF with 4 items

GIF with more than 4 items

当我禁用过渡动画时,cardview 展开可以正常处理超过 4 个项目。我认为问题与位置变化有关,但我找不到任何解决问题的方法。

我用来实现cardview扩展的指南可以在这里找到: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”的库让它工作,但似乎仍然无法弄清楚为什么它在没有额外库的情况下无法工作。

最佳答案

我有类似的问题。 添加适配器:

@Override
public long getItemId(int position) {
    return position;
}

myAdapter.setHasStableIds(true);

关于Android recyclerview 动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427454/

相关文章:

java - Android:将网站作为字符串获取

java - 尝试设置 Preference 的 setTitle() 时出现 NullPointerException

javascript - 通过使用 Javascript 设置不透明度淡入元素

Android:图像益智游戏使用什么 View ?

适用于多个屏幕的 Android dimens 文件

android - Activity <App Name> 泄露了原来绑定(bind)在这里的ServiceConnection <ServiceConnection Name>@438030a8

javascript - Velocity.js 动画延迟

ios - UIButton 动画扩展

html - 记住滚动条在 HTML/CSS 表格中的位置

html - 带有 `position: absolute` 的内部按钮将放置在 table 外面