在Android中查看时调整ListView元素的大小?

时间:2014-03-26 08:52:52

标签: android listview android-listview resize

我要做的是使用可能是textview / imageview的views / elements填充listView。这些文本视图可能是可扩展的。如果textview被扩展,我希望listview调整大小并包装内容。

已经有几种解决方案: 1.使ListView元素的元素不可见,以便ListView中的视图已经是您想要的大小。在这种情况下,使用原始长字符串创建文本视图,然后将其折叠。 2.调整适配器中的元素大小,然后调用notifyDataSetChanged();

但是,我正在寻找一种解决方案,其中ListView中的视图会自动调整大小,即使其可见。我尝试使用解决方案#2,虽然它适用于更改视图中的值(如字符串),但它不会完全调整视图大小,除非视图在屏幕上滚动然后返回到视图中。

我的代码的相关部分如下:

holder.text.setTrim(!holder.text.getTrim());
holder.text.setText();
holder.text.requestFocusFromTouch();
notifyDataSetChanged();
holder.text.invalidate();
vi.invalidate();
vi.requestLayout(); 

我将它放在适配器的getView函数内的OnClickListener中。

有人有任何解决方案吗?

PS。有没有人试过用多个适配器做一个方法?这个似乎对我来说效果不好,因为我可能有数百个元素。

编辑: 所以我提出了一个非常荒谬的愚蠢解决方案的一部分。这种行为毫无意义。下面(primaryTextView与上面的文本相同,例如holder.primaryTextView == holder.text)

holder.primaryTextView.setTrim(!holder.primaryTextView.getTrim());
if(!holder.primaryTextView.getTrim()){
holder.primaryTextView.setVisibility(View.GONE);
}
else{
holder.primaryTextView.setVisibility(View.VISIBLE);
}
notifyDataSetChanged();
vi.invalidate();

这允许您在查看视图时展开视图,但在文本折叠后不允许缩小视图。此外,View.GONE和View.VISIBLE不可互换。最后,在View.GONE被触发的情况下,textView甚至不会消失。也许这可能是一个线索?

2 个答案:

答案 0 :(得分:1)

  

除非视图在屏幕上滚动,否则它不会完全调整视图大小,然后返回视图。

它正在运行,但当您滚动关闭时,您没有刷新列表视图。 return,listview 重新创建更新的视图。

您应该notifyDataSetChanged(); adapter.notifyDataSetChanged();

答案 1 :(得分:1)

没关系发现问题: 在我的布局中,我使用的是高度=" 0dp"而不是" wrap_content"