Ошибка подсчета элементов listView

Я пытаюсь подсчитать элементы listView. Я использую этот код:

int count=0;
ListView listView = (ListView) findViewById(R.id.listView1);
 for(int i = 0; i  <= listView.getLastVisiblePosition(); i++)
         {
             if(listView.getChildAt(i)!= null)
             {
                 count++;  
             }
         }

Toast.makeText(getApplicationContext(), String.valueOf(count), Toast.LENGTH_SHORT).show();

Почему значение переменной COUNT всегда равно 0, когда listView отображает некоторые записи?


person Community    schedule 03.03.2013    source источник
comment
listView.getLastVisiblePosition() == 0 ???   -  person Simon    schedule 03.03.2013
comment
ListView заполняется из ListAdapter, у которого есть метод getCount(). Это то, что вам нужно? developer.android.com/reference/android/widget/Adapter.html   -  person vokilam    schedule 03.03.2013


Ответы (3)


Если вы ищете количество всех элементов ListView, вы можете использовать этот вызов (убедитесь, что адаптер установлен):

listView.getCount();

Если вам нужно количество видимых элементов, попробуйте это (работает только для видимого ListView):

listView.getLastVisiblePosition()-listView.getFirstVisiblePosition();
person gingo    schedule 03.03.2013

Позвольте мне объяснить причину. Вы только что получили список, подобный этому

ListView listView = (ListView) findViewById(R.id.listView1);

поэтому в списке нет элементов, а затем вы пытаетесь получить последнюю видимую позицию, используя listView.getLastVisiblePosition(), он всегда возвращает ноль, потому что ваш список еще не связан с каким-либо адаптером, т.е. ваш список пуст в то время, когда вы получаете последнюю видимую позицию попробуй place this code after binding Adapter to the listview

for(int i = 0; i  <= listView.getLastVisiblePosition(); i++)
         {
             if(listView.getChildAt(i)!= null)
             {
                 count++;  
             }
         }
person Pragnani    schedule 03.03.2013

Используйте это. Это помогает мне

String CountListRowNo= String.valueOf(+ListviewObj.getAdapter().getCount());
person IntelliJ Amiya    schedule 16.12.2014