#android #listview #zero
#Android #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. Как вы вызываете getCursor() здесь? Я не вижу для этого метода Activity или Context…
2. Да, я вызываю getCursor() внутри onResume(). Приложение работает нормально, единственная проблема — 0 в getChildCount()
Ответ №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
}
}
Комментарии:
1. Хе-хе, здесь вы найдете всю необходимую информацию о том, как, почему и когда принимать ответы.