从MergeAdapter中删除视图

4

是否有可能从MergeAdapter中删除视图或适配器?我尝试扩展它并从pieces中删除视图,但它是private的。或者也许在这个适配器中显示/隐藏视图的另一种替代方案?我尝试将其layout_height设置为零并将可见性设置为View.GONE,但它仍然显示空列表项。提前致谢。

4个回答

8

要从MergeAdapter中移除视图或适配器,请使用以下方法:

在您的MergeAdapter实例上使用setActive()

例如: 要从MergeAdapter(merAdapter)中移除一个TextView(mytextView),请使用:

merAdapter.setActive(mytextViiew,false);

要重新启用它(使其可见),请使用以下代码:

merAdapter.setActive(mytextViiew,true);

请参考 MergeAdapter 文档以获取详细信息: https://github.com/commonsguy/cwac-merge

6

有没有办法从MergeAdapter中删除视图或适配器?

目前还不行,抱歉。如果你想试一试,添加不应该太难(从集合中删除并调用notifyDataSetChanged()更新AdapterView)。欢迎贡献! :-)


1

在Mark Murphy的回答基础上,我认为这很简单,只需要将此方法添加到MergeAdapter中:

public void removeAdapter(ListAdapter la) {
    pieces.remove(la);
  }

remove() 接受一个对象,如果该对象包含在 pieces 列表中,则会执行所有必要的测试和删除操作。您可以为自己的目的返回一个布尔值或其他内容,但我没有这样的需求。

然后只需调用类似以下的内容:

int view_to_remove = *AN_INT*
adapter.removeAdapter(listAdapter.getAdapter(view_to_remove));
adapter.notifyDataSetChanged();

如果我没记错的话,在MergeAdapter中,pieces是私有访问权限,所以我需要修改它的源代码。我对GitHub和贡献不是很熟悉,所以最终采用了一些变通方法。但还是感谢您的建议。 - ernazm

1

你的MergeAdapter应该有一个叫做getCount()的方法.. 如果我理解正确的话,从那里返回零可能会解决你的问题..


嗨ntc,我假设在getCount()中返回零将隐藏所有视图,但我需要隐藏特定的一个。例如,我添加了2个视图,2个适配器,然后再次添加了2个视图,现在我想要移除/隐藏第二个视图。 - ernazm
那么在getView()方法中,您将获得所请求视图的位置..在所需位置上,您可以将其可见性设置为gone..如果您可以发布一些代码片段,可能我们会更清楚您的目的。 - ngesh
尽管在getView()内设置视图的可见性不会隐藏列表项,但我会尝试不覆盖此方法来附加视图,感谢这个提示。 - ernazm
getView()中,最终返回了一个带有ListView.LayoutParamswidth为0的新视图。如果MergeAdapter的作者不回复,我会接受你的答案。再次感谢。 - ernazm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接