getChildCount() возвращает 0 в ListView
Мне нужно проверить все элементы в ListView, чтобы установить метку только для одного из них. Я не могу отредактировать базу данных или адаптер, я просто хочу прокрутить ListView, чтобы выполнить проверку и установить строку в TextView.
@Override
protected void onResume(){
super.onResume();
...
cursor = getCursor();
startManagingCursor(cursor);
adapter = new SimpleCursorAdapter(this,R.layout.profile_item_layout,cursor,from,to);
lst_profiles.setAdapter(adapter);
SharedPreferences customSharedPreference = PreferenceManager.getDefaultSharedPreferences(ProfilerActivity.this.getApplicationContext());
long current = customSharedPreference.getLong(ProfileManager.CURRENT, -1);
toast(lst_profiles.getChildCount()); //display 0
if(current!=-1){
for(int i=0;i<lst_profiles.getChildCount();i++){
if(lst_profiles.getItemIdAtPosition(i)==current)
((TextView)lst_profiles.getChildAt(i).findViewById(R.id.activeLabel)).setText(getString(R.string.active));
else
((TextView)lst_profiles.getChildAt(i).findViewById(R.id.activeLabel)).setText("");
}
}
}
Как я могу сделать? Мне нужно что-то ждать?
PS Очевидно, что ListView не пустой.
1 ответ
Это похоже на неприятный хак. Но ладно...
Дело в том, что в вашем списке не будет детей, если этот список не отображается пользователю. Но вы должны понимать, что getChildCount
вернет количество видимых элементов списка (так что может быть около 10 просмотров), и их положение никогда не будет связано с фактическим положением элемента в адаптере.
Если вам действительно нужно общаться с представлениями на таком низком уровне, вы можете попробовать добавить слушателя прокрутки к вашему списку:
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
for (int i = 0; i < visibleItemCount; i++) {
View child = getChildAt(i);
// i + firstVisibleItem == the actual item position in the adapter
}
}