如何正确隐藏RecyclerView中name为指定值的CardLayout条目?
问题原因
你遇到的异常是RecyclerView的条目复用机制导致的:你只给满足隐藏条件的条目设置了View.GONE,没有给不满足条件的条目显式设置View.VISIBLE。当条目被复用时,如果之前被设为隐藏状态,就会继续保持GONE,最终出现不满足条件的条目也被误隐藏的情况。
解决方案
方案1:补全可见性判断逻辑
在Adapter的onBindViewHolder方法中补全else分支,不满足隐藏条件的条目强制设为可见:
if (dealer.getName().equals("abcde")) { cardlayout.setVisibility(View.GONE); } else { cardlayout.setVisibility(View.VISIBLE); }
注意:该方案只是修复显示异常,隐藏的条目仍然会占用列表的布局位置,可能出现空白间隙,体验不佳。
方案2(更推荐):过滤数据源
直接把不需要展示的条目从传给Adapter的数据源中移除,不需要操作View的可见性,从根源避免复用问题,也不会出现空白间隙:
// 从数据库获取原始数据后先做过滤 List<Dealer> filteredList = new ArrayList<>(); for (Dealer dealer : originalDealerList) { if (!dealer.getName().equals("abcde")) { filteredList.add(dealer); } } // 将过滤后的列表传给Adapter并刷新 adapter.setData(filteredList); adapter.notifyDataSetChanged();
如果需要动态切换是否展示被过滤的条目,保留原始数据源,切换时重新过滤数据源再刷新列表即可。
内容的提问来源于stack exchange,提问作者Heman Kadariya
相关产品推荐
相关产品推荐

