【发布时间】:2011-05-23 18:44:50
【问题描述】:
ListView 中每条记录的 TextSwitcher 应显示第一个值 (text1),然后显示另一个值 (text2),然后再次显示第一个值,依此类推.只有当 text2 不为空时才会发生。否则 text1 应该总是显示(没有任何变化和动画)。
我创建了Runnable(),它将布尔变量 (time2) 更改为调用 items.notifyDataSetChanged()。它按预期工作,结果setViewValue() for my 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 调用了错误的参数?
更新。 text1 和 text2 从setViewValue 的数据库中读取。以下是完整代码示例:
itemTime.setText(cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_CLOSE_TIME_1)) + " - " + cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_OPEN_TIME_1)));
【问题讨论】:
标签: android sqlite android-listview