Что такое конвертировать вид в адаптере - PullRequest
0 голосов
/ 27 июня 2018

Я не могу понять, что такое представление с преобразованием. В частности, когда программа входит, если условие и когда еще условие?

public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        LayoutInflater mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.data, parent, false);

            holder = new ViewHolder();
            holder.txtDesc = convertView.findViewById(R.id.txtDesc);
            holder.txtSubject = convertView.findViewById(R.id.txtSubject);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.txtDesc.setText(profileListView.get(position).getName());
        holder.txtSubject.setText(profileListView.get(position).getEmail());

        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, profileListView.get(position).getName()+"hi go to detail page", Toast.LENGTH_SHORT).show();


            }
        });
        return convertView;
    }

1 Ответ

0 голосов
/ 27 июня 2018

convertView - это представление, которое повторно используется адаптером ListView. При прокрутке элементы, которые больше не видны, снова используются для отображения новых элементов, которые становятся видимыми. Это называется утилизацией и сделано для улучшения производительности.

Если convertView равно нулю, это означает, что нет представления, которое можно повторно использовать для этих элементов, поэтому вам нужно накачать новое представление из макета XML и вернуть его в конце метода.

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

Здесь также есть еще одно улучшение производительности - шаблон держателя вида. Он хранит ссылки на представления элементов, поэтому вам не нужно вызывать операцию findViewById для каждого элемента. Это также дорогостоящая операция, которую приятно избегать.

...