如何解决Kotlin中索引差距较大的View无法交换的问题?
解决View与不可见View交换失效的问题
确认不可见View的可见性状态:如果目标View是
GONE状态,它会从布局树中移除、不占布局空间,交换逻辑大概率找不到它或无法计算位置。可以先临时把它设为INVISIBLE(保留布局占位),完成交换后再按需恢复原状态:// 交换前临时切换可见性 targetView.setVisibility(View.INVISIBLE); // 执行你的View交换逻辑 swapViews(clickedView, targetView); // 交换后恢复原状态(比如原本是GONE) targetView.setVisibility(View.GONE);提前缓存不可见View的布局参数:很多交换逻辑依赖View的
getLeft()、getTop()或LayoutParams,但GONE状态下这些值可能无效。提前把不可见View的布局参数存下来,交换时直接复用缓存的参数,别实时获取。强制触发布局重绘:交换完成后,调用父布局的
requestLayout()和invalidate(),让系统重新计算布局并绘制,避免交换后View显示异常:parentLayout.requestLayout(); parentLayout.invalidate();检查交换逻辑的过滤规则:看看你写的交换代码里有没有加“只处理可见View”的判断(比如
if (view.getVisibility() == View.VISIBLE)),把这个限制去掉,或者调整为允许处理INVISIBLE/GONE状态的View。
内容的提问来源于stack exchange,提问作者user19887284
相关产品推荐
相关产品推荐

