2015-09-06 4 views
0

В настоящее время я запутываю адаптер в android, особенно поведение функции getView.Android Adapter и поведение getView

Нашел много ответов, в которых говорилось, что функция getView() будет вызываться всякий раз, когда изменяется список, например, при прокрутке списка.

Тогда я положил это в функции GetView:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Log.v("GET VIEW", "" + " ITEM accordingly " + position); 
    ... 
} 

и когда я бегу, это то, что я получил в LogCat:

09-06 17:18:23.812 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 0 
09-06 17:18:23.848 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 0 
09-06 17:18:23.851 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 0 
09-06 17:18:23.868 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 0 
09-06 17:18:23.874 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 1 
09-06 17:18:23.880 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 2 
09-06 17:18:23.887 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 3 
09-06 17:18:23.894 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 4 
09-06 17:18:23.903 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 5 
09-06 17:18:23.910 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 6 
09-06 17:18:23.930 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 0 
09-06 17:18:23.932 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 1 
09-06 17:18:23.937 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 2 
09-06 17:18:23.942 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 3 
09-06 17:18:23.948 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 4 
09-06 17:18:23.958 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 5 
09-06 17:18:23.968 3555-3555/com.example.nguyenquanganh.cookingassistance V/GET VIEW﹕ ITEM accordingly 6 

более того, это не что-нибудь еще напечатать когда я просматриваю список. Вышеупомянутый вывод - это когда я запускаю действие, и я ничего не делал.

Так может кто-нибудь объяснить мне, почему существует несколько вызовов getView на одном и том же элементе? и почему getView не вызывался при прокрутке списка?

+0

Что вы делаете в методе? см. эти ссылки, есть полезные: http://www.codelearn.org/android-tutorial/android-listview и http://www.vogella.com/tutorials/AndroidListView/article.html – AsfK

+0

В методе, который я просто связываю данные в listView. Он запускается, но я хочу узнать больше о поведении этого метода, так как вы можете видеть вывод в catlog, этого не ожидается вообще. –

ответ

0

Представления в виде списка используются повторно, так как у вас есть только 7 элементов в представлении списка, просмотр списка не вызовет getView адаптера, когда он получит соответствующую информацию раньше. Попытайтесь увеличить количество ваших детей, тогда произойдет повторная переработка.

+0

да только 7 элементов, но каждый элемент имеет много строк текста, поэтому мне еще нужно прокрутить, чтобы увидеть все 7. Но в то время, когда он запускается, он запускает getView по всем 7 элементам. Более того, есть и повторяющиеся вызовы, и item0 вызывается снова и снова много раз. Почему это –

+0

Вы вызываете notifyDataSetChanged в некотором месте? Это приведет к перезагрузке представлений системы. Эти обратные вызовы вызываются системой, поэтому это поведение системы. Возможно, для множественной загрузки элемента 0 он хочет определить размер представления или что-то еще. Что касается номера предварительной выборки, это также определяется системой, возможно, это число связано с памятью или другими условиями, у разных телефонов разные номера пулов. Вы должны найти источник андроида для какой-то подсказки. – reviver

+0

Нет, я еще не касался notifyDataSetChanged. И у меня есть что-то интересное, скажем, если у меня есть кнопка внутри listView, а затем я объявляю для нее какой-то слушатель, например onTouchListener в getView, значит ли это, что если getView вызывается несколько раз на одном и том же элементе, то эта кнопка еще раз объявить OnTouchListener? Если это так, то если у меня есть некоторые данные, сохраненные в адаптере для отслеживания какого-либо поведения, эти данные будут потеряны или перепутаны слишком правильно? –