如何向/从linearLayout动态添加/删除textViews?

时间:2015-08-29 07:31:08

标签: android textview android-linearlayout dynamically-generated

我有db的国家名称(例如)。 我的第一个目标是动态地将textView for(每个国家/地区)添加到linearLayout (android:layout_width="match_parent" android:layout_height="match_parent")。实际上添加不是问题,但是如果布局的方向是horizontal并且有很多国家/地区存在问题,但是布局的宽度不足以显示所有这些并且它们是隐藏的!

所以我需要动态添加textViews,但是如果新textView没有足够的空间 - 在下一行添加它或者创建新的linearLayout。

我需要为每个国家/地区创建新的textView,而不是为每个国家/地区创建clickListener,还有第二个目标......

第二个目标是通过单击删除一些textView,另一个textView必须重定位到该空白空间。 希望我的解释清楚:)如果不是我会尝试另一个。

所以,我知道如何添加textView:每当我添加新的textView时 - 计算所有以前添加的文本的长度,并将其与linearLayout的长度进行比较,如果所有textViews的长度较小 - 添加到这个linLayout,否则 - 创建新的林布局并在那里添加textView。 我认为这可行,它看起来很丑:) 我希望必须有更简单,更漂亮的解决方案!

谈论从布局中动态删除textViews - 我不知道如何正确地执行此操作。

所以我会很高兴任何解决方案和想法,谢谢!

修改 这是我最终想要的示例:enter image description here

2 个答案:

答案 0 :(得分:2)

LinearLayout通常用于固定的孩子。

对于动态和大量的孩子,您应该使用RecyclerViewListView,这完全是为您所描述的内容而设计的。

除此之外,RecyclerView和{{1}}可以重复使用子视图,即您需要的TextView,因为视图对象很难创建并保留在内存中。

修改

鉴于你的形象和评论中的回复。我建议你使用TextView和ClickableSpan,并在点击时设置更新整个文本。

您可以在下面的链接中查看ClickableSpan。

http://www.programcreek.com/java-api-examples/index.php?api=android.text.style.ClickableSpan

答案 1 :(得分:0)

您可以使用flowlayout。 flowlayout的链接是https://github.com/ApmeM/android-flowlayout。只需在flowlayout中填充您的视图。在充气时你不必进行任何计算。如果有可用于textviews的空间,那么它们将在下一行中水平添加。