1: Программа LayoutInflater
берет ваши XML-файлы макета и создает из их содержимого различные View-объекты.
2: Адаптеры созданы для повторного использования представлений, когда представление прокручивается так, что оно больше не отображается, его можно использовать для одного из новых отображаемых представлений. Этот повторно используемый вид представляет собой файл convertView
. Если это значение null, это означает, что переработанного представления нет и мы должны создать новый, в противном случае мы должны использовать его, чтобы избежать создания нового.
3: parent
Предоставляется так, чтобы вы могли расширить свое представление для правильных параметров макета.
Все это вместе можно использовать для эффективного создания представления, которое появится в вашем списке (или другом представлении, требующем адаптера):
public View getView(int position, @Nullable View convertView, ViewGroup parent){
if (convertView == null) {
//We must create a View:
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
}
//Here we can do changes to the convertView, such as set a text on a TextView
//or an image on an ImageView.
return convertView;
}
Обратите внимание на использование LayoutInflater
, которое parent
может использоваться в качестве аргумента для него, и на то, как convertView
оно используется повторно.
getView()
Способ адаптер для зрения генерирующего элемента изListView
,Gallery
...LayoutInflater
используется , чтобы получить вид объекта , который вы определяете в макет XML (корневой объект, обычноLinearLayout
,FrameLayout
илиRelativeLayout
)convertView
подлежит переработке. Скажем, у вас есть представление списка, которое может отображать только 10 элементов за раз, и в настоящее время оно отображает элемент 1 -> элемент 10. Когда вы прокручиваете один элемент вниз, элемент 1 будет за пределами экрана, а элемент 11 будет отображаться. . Чтобы сгенерировать представление для элемента 11, будет вызван метод getView (), иconvertView
вот вид элемента 1 (который больше не нужен). Поэтому вместо этого создайте новый объект View для элемента 11 (что дорого), почему бы не использовать повторноconvertView
? => мы просто проверяем,convertView
является ли null или нет, если null создает новое представление, иначе используется повторноconvertView
.parentView
- это ListView или Gallery ... который содержитgetView()
созданное представление элемента .Примечание : вы не вызываете этот метод напрямую, просто нужно реализовать его, чтобы сообщить родительскому представлению, как сгенерировать представление элемента.
источник
Вы можете посмотреть это видео о просмотре списка. Это с прошлых лет Google IO и до сих пор, на мой взгляд, лучший просмотр списков.
http://www.youtube.com/watch?v=wDBM6wVEO70
Он раздувает макеты (файлы xml в папке res / layout /) в объекты Java, такие как LinearLayout и другие представления.
Посмотрите видео, и вы узнаете, что такое преобразованное представление, в основном это переработанное представление, ожидающее повторного использования вами, чтобы избежать создания нового объекта и замедления прокрутки вашего списка.
Позволяет ссылаться на представление списка из адаптера.
источник
Когда вы проектируете с использованием XML, все ваши элементы пользовательского интерфейса - это просто теги и параметры. Прежде чем вы сможете использовать эти элементы пользовательского интерфейса (например, TextView или LinearLayout), вам необходимо создать фактические объекты, соответствующие этим элементам xml. Вот для чего нужен надувной насос. Inflater использует эти теги и соответствующие им параметры для создания фактических объектов и установки всех параметров. После этого вы можете получить ссылку на элемент пользовательского интерфейса с помощью findViewById ().
Это интересно. Видите ли, getView () вызывается каждый раз, когда отрисовывается элемент в списке. Теперь, прежде чем элемент можно будет нарисовать, его нужно создать. Теперь convertView в основном является последним используемым представлением для рисования элемента. В getView () вы сначала раздуваете xml, а затем используете findByViewID () для получения различных элементов пользовательского интерфейса элемента списка. Когда мы проверяем (convertView == null), мы проверяем, что если представление имеет значение null (для первого элемента), то создаем его, иначе, если оно уже существует, повторно используем его, нет необходимости снова проходить процесс надувания . Делает это намного более эффективным.
Вы также должны были столкнуться с концепцией ViewHolder в getView (). Это делает список более эффективным. Что мы делаем, так это создаем зрителя и сохраняем ссылку на все элементы пользовательского интерфейса, которые мы получили после наполнения. Таким образом, мы можем избежать многочисленных вызовов findByViewId () и сэкономить много времени. Этот ViewHolder создается в условии (convertView == null) и сохраняется в convertView с помощью setTag (). В цикле else мы просто получаем его обратно с помощью getView () и повторно используем.
Родителем является ViewGroup, к которой окончательно прикрепляется ваше представление, созданное с помощью getView (). Теперь в вашем случае это будет ListView.
Надеюсь это поможет :)
источник
Инфлятор макета раздувает / добавляет внешний XML к вашему текущему представлению.
getView () вызывается много раз, в том числе при прокрутке. Так что, если у него уже есть завышенное представление, мы не хотим делать это снова, так как раздутие - дорогостоящий процесс ... вот почему мы проверяем, является ли его значение null, а затем раздуваем его.
Родительское представление - это отдельная ячейка вашего списка.
источник
LayoutInflater
используется для создания динамических представлений XML дляListView
элемента илиonCreateView
фрагмента.ConvertView
в основном используется для повторного использования представлений, которых сейчас нет в представлении. Скажем, у вас есть прокручиваемыйListView
. При прокрутке вниз или вверхconvertView
отображается вид, который был прокручен. Это повторное использование экономит память.Параметр parent
getView()
метода дает ссылку на родительский макет, который имеет listView. Допустим, вы хотите получить идентификатор любого элемента родительского XML, который вы можете использовать:источник
getView()
метод создать новыйView
илиViewGroup
для каждой строкиListview
или Spinner. Вы можете определить этоView
илиViewGroup
вLayout XML
файле вres/layout
папке и можете дать ссылку на негоAdapter
класс Object.если у вас есть 4 элемента в массиве, переданном адаптеру.
getView()
Метод создаст 4 View для 4 рядов Adaper.Класс LayoutInflater имеет метод inflate (), который создает объект представления из макета ресурса XML.
источник
Вы также можете найти полезную информацию о getView в интерфейсе адаптера в файле Adapter.java. Он говорит;
источник