Как правильно использовать TextSwitcher в ListView?

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 = 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)));
8
задан LA_ 7 June 2011 в 19:33
поделиться