Это сработало для меня:
за каждую запись вTextSwitcher
должно отображать первое значение (ListView
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.
text1 а такжеtext2 читаются из базы данных на, Вот пример полного кода:setViewValue
Я думаю, что вижу, что здесь происходит, и это из-за того, как работает ListView.
itemTime.setText(cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_CLOSE_TIME_1)) + " - " + cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_OPEN_TIME_1)));