android – 如何在ListView中正确使用TextSwitcher?

android – 如何在ListView中正确使用TextSwitcher?,第1张

概述ListView中每条记录的TextSwitcher应显示第一个值(text1),然后显示另一个值(text2),然后再显示第一个值,依此类推.只有当text2不为空时才会发生.否则应始终显示text1(不进行任何更改和动画). 我创建了Runnable(),它更改了布尔变量(time2),然后调用items.notifyDataSetChanged().它按预期工作,并在结果setViewVal ListVIEw中每条记录的TextSwitcher应显示第一个值(text1),然后显示另一个值(text2),然后再显示第一个值,依此类推.只有当text2不为空时才会发生.否则应始终显示text1(不进行任何更改和动画).

我创建了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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1138760.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存