My 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
.Вот пример полного кода:
itemTime.setText(cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_CLOSE_TIME_1)) + " - " + cursor.getString(cursor.getColumnIndexOrThrow(DbAdapter.KEY_OPEN_TIME_1)));