相关疑难解决方法(0)

在RecyclerView.Adapter中覆盖notifyItemChanged的动画

好吧,我有一个带适配器的RecyclerView,一切都很好.ArrayList数据集中的项目将定期更新.因此,项目及其元素以及它们在列表中的位置会发生变化.无论什么时候发生,都可以通过简单的排序和手动调用这些方法来实现:

// swapping two items
Collections.swap(items, i, j);
itemsAdapter.notifyItemMoved(i, j);

// adding a new one
itemAdapter.notifyItemInserted(items.size());

// when updating valus
itemAdapter.notifyItemChanged(i);
Run Code Online (Sandbox Code Playgroud)

后者,是我痛苦的原因.每次更新项目时,都会触发一点"闪烁"动画.

我找到了几个解决方案:

// disabling all animations
recyclerView.getItemAnimator().setSupportsChangeAnimations(false);

// or

// setting the animation duration to zero,
recyclerView.getItemAnimator().setChangeDuration(0);
Run Code Online (Sandbox Code Playgroud)

但是当项目移动(被交换)时,这两个都会杀死动画.我只想覆盖一个动画并保持所有这些魔力.有办法做到这一点吗?如果它超越了ItemAnimator,有没有人有一个简单的例子?

提前致谢!

android android-recyclerview

54
推荐指数
5
解决办法
3万
查看次数

在recyclerview中的notifydatachanged期间保持涟漪效应

我开始修改我的应用程序以支持棒棒糖.基本上,我有一个带有recyclerview的文件浏览器片段,当用户打开这个片段时,他会看到他的根目录下的所有文件夹,当用户点击我需要获取所有子文件夹+文件的文件夹并将其显示给用户使用与notifydatachanged相同的recyclerview.功能正常的问题是当用户单击文件夹时,在notifydatachanged期间不保留涟漪效应.

file_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/file_name"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/selectableItemBackground"
    android:clickable="true"
    android:drawablePadding="15dp"
    android:ellipsize="marquee"
    android:focusable="true"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingLeft="14dip"
    android:paddingRight="15dip"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="?android:attr/textColorAlertDialogListItem" />
Run Code Online (Sandbox Code Playgroud)

Recyclerview适配器:

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.CustomViewHolder>{

    private List<Item> _data;
    private Context _context;
    private IFileListener _listener;

    public RecycleAdapter(Context context, List<Item> data,IFileListener listener) {
        _data = data;
        _context = context;
        _listener = listener;
    }

    public void setData(List<Item> data)
    {
        _data = data;
        notifyDataSetChanged();
    }


    @Override
    public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(_context).inflate(R.layout.file_item, viewGroup,false);

        CustomViewHolder viewHolder = new CustomViewHolder(view);
        return …
Run Code Online (Sandbox Code Playgroud)

android ripple android-recyclerview

8
推荐指数
1
解决办法
1143
查看次数

标签 统计

android ×2

android-recyclerview ×2

ripple ×1