【发布时间】:2011-10-19 20:19:12
【问题描述】:
是否可以以某种方式从MergeAdapter 中删除视图或适配器?我会尝试扩展它并从pieces 中删除视图,但它是private。或者也许有另一种解决方案可以在此适配器中显示/隐藏视图?我尝试将其layout_height 设置为零并将可见性设置为View.GONE,但它仍然显示空列表项。提前致谢。
【问题讨论】:
是否可以以某种方式从MergeAdapter 中删除视图或适配器?我会尝试扩展它并从pieces 中删除视图,但它是private。或者也许有另一种解决方案可以在此适配器中显示/隐藏视图?我尝试将其layout_height 设置为零并将可见性设置为View.GONE,但它仍然显示空列表项。提前致谢。
【问题讨论】:
你的 MergeAdapter 应该有一个名为 getCount().. 如果我理解你的方法,从那里返回零可能会解决你的问题..
【讨论】:
getCount() 中返回零将隐藏所有视图,但我需要隐藏特定的视图。例如,我添加了 2 个视图、2 个适配器,然后又添加了 2 个视图,现在我想删除/隐藏第 2 个视图。
getView() 上设置视图的可见性不会隐藏列表项,但我会尽量不附加覆盖此方法的视图,所以感谢您的提示。跨度>
ListView.LayoutParams 和width 0 in getView() 返回新视图。如果MergeAdapter的作者不回复,我会接受你的回答。再次感谢。
是否可以以某种方式从 MergeAdapter 中删除视图或适配器?
暂时没有,抱歉。如果您想试一试,添加(将其从集合中删除并调用notifyDataSetChanged() 以更新AdapterView)应该不会太难。欢迎投稿! :-)
【讨论】:
扩展 Mark Murphy 的回答,我认为这就像将这个方法添加到 MergeAdapter 一样简单:
public void removeAdapter(ListAdapter la) {
pieces.remove(la);
}
remove() 接受一个对象,如果该对象包含在片段列表中,它将为您进行所有必要的测试和删除。您可以根据自己的目的将此返回一个布尔值或其他东西,但我没有这样的需要。
然后只需调用类似:
int view_to_remove = *AN_INT*
adapter.removeAdapter(listAdapter.getAdapter(view_to_remove));
adapter.notifyDataSetChanged();
【讨论】:
pieces 在 MergeAdapter 中有私有访问权限,所以我需要修改它的来源。我对 GitHub 和那里的贡献不太熟悉,所以我最终找到了一些解决方法。不过谢谢你的建议。
要从MergeAdapter 中删除视图或适配器,请使用以下方法:
setActive() 在您的 mergeAdapter 实例上。
例如:
要从 MergeAdapter(merAdapter) 中删除 Textview (mytextView),请使用:
merAdapter.setActive(mytextViiew,false);
并再次启用它(使其可见)使用:
merAdapter.setActive(mytextViiew,true);
详情请参阅MergeAdapter 文档:
【讨论】: