【问题标题】:Android ItemTouchHelper onChildDraw make itemView return to its original positionAndroid ItemTouchHelper onChildDraw 让itemView回到原来的位置
【发布时间】:2020-10-21 07:42:16
【问题描述】:

我在SimpleItemTouchHelper 类中重写了onChildDraw 方法,方法如下:

@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
        float width = (float) viewHolder.itemView.getWidth();
        float alpha = 1.0f - Math.abs(dX) / width;
        viewHolder.itemView.setAlpha(alpha);
        viewHolder.itemView.setTranslationX(dX);
    } else {
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY,
                actionState, isCurrentlyActive);
    }
}

这只是在您向左或向右滑动时启用动画淡入淡出。

在我的适配器中,我实现了 ItemTouchHelperAdapter 并以下列方式覆盖 onItemDismiss 以显示 AlertDialog 以确认您是否要删除选定的元素:

public class TeambuilderAdapter extends RecyclerView.Adapter<TeambuilderAdapter.ViewHolder> implements ItemTouchHelperAdapter {

    @Override
    public void onItemDismiss(int position) {

        DialogInterface.OnClickListener dialogClickListener =(dialog, which) -> {
            if (which == DialogInterface.BUTTON_POSITIVE) {
                mData.remove(position);
                notifyItemRemoved(position);
                ((PokemonTeambuilderTabActivity) mContext).refreshTeamList();
            }
        };

        new AlertDialog . Builder (mContext)
                .setTitle(mContext.getString(R.string.remove_team))
                .setMessage(mContext.getString(R.string.remove_team_question))
                .setPositiveButtonIcon(ContextCompat.getDrawable(mContext, R.drawable.ic_baseline_check_circle_14))
                .setPositiveButton(mContext.getString(R.string.confirm), dialogClickListener)
                .setNegativeButtonIcon(ContextCompat.getDrawable(mContext, R.drawable.ic_baseline_cancel_14))
                .setNegativeButton(mContext.getString(R.string.decline), dialogClickListener)
                .show();

    }
...
}

一切正常,问题在于如果我按下取消按钮,滑动的项目会消失,只有在我重新进入活动时才会再次出现。

当我按下取消或离开对话框时,如何恢复原来的位置?

【问题讨论】:

    标签: android android-recyclerview android-animation swipe-gesture itemtouchhelper


    【解决方案1】:

    您的 dialogClickListener 未处理取消按钮操作。
    对于取消操作,获取您的 itemView 和 setTranslationX(0)setAlpha(1)

    【讨论】:

    • 如何在取消按钮操作中获取 itemView??
    • 好吧,如果您不想麻烦地查找它,我认为在您的适配器上调用 notifyItemChanged (int position) 会更新该位置的视图,所以只要您重置绑定视图时的alpha和翻译,应该不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多