2010-11-11 1 views
3

У меня есть listview, и я переопределяю событие onScroll для него, чтобы я мог получить первый символ текста в первом видимом элементе списка. Мой код выглядит следующим образом:Некоторые элементы имеют значение null в listview onScroll метод

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
    // 
} 
@Override 
public void onScroll(AbsListView view, int firstVisibleItem, 
      int visibleItemCount, int totalItemCount) { 
    ListView caller = (ListView) view; 
    View v = caller.getChildAt(firstVisibleItem); 
    if(v instanceof TextView){ 
     TextView tv = (TextView) v; 
     if(tv != null){ 
      String sInitial = tv.getText().toString(); 
      sInitial = Character.toString(sInitial.charAt(0)); 

      TextView tvPager = (TextView) findViewById(R.id.tvPager); 
      tvPager.setText(sInitial); 
     } 
    } 
} 

Когда переменная FirstVisibleItem от 0 до 12 (если быть точным), на мой взгляд v не равно нулю, и я могу получить текст этого. Но когда он выходит за пределы 12, мой v уже равен нулю. Мои элементы более чем 12, поэтому он не должен быть нулевым.

С кодом нет в коде? Или есть лучший способ делать то, что я хочу? Спасибо заранее!

ответ

0

Андроид listview перерабатывает «элементы» в списке, когда они не видны на экране. Итак, все, что не видно, будет равно нулю.

http://commonsware.com/Android/excerpt.pdf

+0

да .. но firstVisibleItem должен быть видимым право? И я получаю текущий вид из firstVisibleItem. – junmats

+0

Это первая видимая позиция вашего адаптера. Он соответствует дочернему индексу 0 в ListView. –

+0

У вас есть идея о том, как выполнить то, что мне нужно? Благодаря.. – junmats