我创建了Runnable(),它更改了布尔变量(time2),然后调用items.notifyDataSetChanged().它按预期工作,并在结果setVIEwValue()中调用我的ListVIEw.
这是代码:
items.setVIEwBinder(new SimpleCursorAdapter.VIEwBinder() { @OverrIDe public boolean setVIEwValue(VIEw vIEw,Cursor cursor,int columnIndex) { int vIEwID = vIEw.getID(); switch(vIEwID) { case R.ID.timetext: TextSwitcher itemTime = (TextSwitcher) vIEw; if (itemTime.getChildCount() != 2) { itemTime.removeAllVIEws(); itemTime.setFactory(new VIEwSwitcher.VIEwFactory() { @OverrIDe public VIEw makeVIEw() { TextVIEw t = new TextVIEw(MyActivity.this); t.setTextSize(18); t.setTypeface(null,Typeface.BolD); t.setTextcolor(color.WHITE); return t; } }); itemTime.setAnimateFirstVIEw(true); itemTime.setInAnimation(AnimationUtils.loadAnimation(MyActivity.this,R.anim.push_up_in)); itemTime.setoutAnimation(AnimationUtils.loadAnimation(MyActivity.this,R.anim.push_up_out)); } if (!text2.equals("")) { if (!time2) { itemTime.setText(text1); } else { itemTime.setText(text2); } } else { itemTime.setCurrentText(text1); } return true; } return false; } } );
它几乎按预期工作.使用一个次要项目 – 当应显示text2时,它首先将显示的值更改为其他值(来自另一个记录!),然后播放动画. text2到text1的更改正确发生.
我的理解原因如下 – 在显示text2之前,itemTime的所有视图都被删除,因此它被重新创建,这就是为什么一些其他值被显示为秒的原因.但为什么它显示其他记录的价值呢?
实际上text2和text1是数据库中的值,例如.
text2 = cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_TIME_2)),可能,这里出了点问题,用错误的参数调用了setVIEwValue?
UPD.在setVIEwValue从数据库中读取text1和text2.以下是完整代码的示例:
itemTime.setText(cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_CLOSE_TIME_1)) + " - " + cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_OPEN_TIME_1)));解决方法 我想我看到这里发生了什么,这是因为ListVIEw的工作方式.
ListVIEw在内部回收其所有视图,因此您只能创建可在屏幕上显示的视图.但是,这也意味着当您将值绑定到setVIEwValue方法中的视图时,并不总是会给出之前在列表中位于相同位置的视图.
假设您有三个列表项:itemA,itemB,itemC.每个都分别包含text1,text2和text3.
当你调用items.notifyDataSetChanged()时,ListVIEw会回收所有这些列表项但感觉就像,所以你可能得到一个新的itemC,itemA,itemB的订单;然后文本将读取text3,text1,text2.
因此,当您将第一个列表项的文本更改为“text2”时,您实际上会看到“text3”更改为“text2”,而不是像您期望的那样从“text1”转换为“text2”.
总结以上是内存溢出为你收集整理的android – 如何在ListView中正确使用TextSwitcher?全部内容,希望文章能够帮你解决android – 如何在ListView中正确使用TextSwitcher?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)