【发布时间】:2013-07-17 11:47:46
【问题描述】:
好吧,伙计们,我真的要疯了。当你尝试了所有的东西时,深夜的东西......
我有一个复合 TextView,左侧有一个图像。图像(只是说“正在加载”的小图片)设置为:
Drawable img = getBaseContext().getResources().getDrawable( R.drawable.loading );
img.setBounds( 0, 0, 120, 120 );
tv.setCompoundDrawables( img, null, null, null );
tv 是 TextView 变量。这很好用。但是,稍后我想用新的drawable替换图像,我尝试再次调用setCompoundDrawables:
tv.setCompoundDrawables( new_img, null, null, null );
我还尝试获取 TextView 的可绘制数组并替换左侧的数组,如下所示:
Drawable[] drw = tv.getCompoundDrawables();
drw[0] = new_img;
代码在调试模式下运行正常。没有异常发生。在 UI 线程中执行的所有 UI 处理。图像似乎还可以,等等,但显示没有改变。我是否必须以某种方式刷新显示?
顺便说一句,如果重要的话,TextViews 会被添加到一个垂直的 LinearLayout 中。我很确定我在这里遗漏了一些明显的东西,但我看不到它。非常感谢。
(是的,我知道我可以用 ImageView 和 vanilla TextView 替换我的设计,但是出于性能原因,如果可能的话,我更愿意坚持使用 Compound TextView)
【问题讨论】:
-
您可以使用带有自定义适配器的列表视图并使用延迟加载来显示图像。这样一来,从您的角度来看,它就不那么复杂了。
-
第二种方法我不希望正常工作,至少没有
invalidate()和requestLayout()。通过观察TextView源代码(我从未尝试过自己更改这些...),这是我期望的第一种方法。您可以尝试使用四个null值调用setCompoundDrawables(),然后使用新图像调用setCompoundDrawables()。原则上,四个nulls 会让你回到原来的状态,在这种情况下,新的setCompoundDrawables()应该和你原来的一样工作。 -
非常感谢大家。我不熟悉延迟加载,所以会查一下。此外,自定义适配器听起来值得一试。
标签: android textview android-drawable