适配器中的转换视图是什么?它是如何工作的?

What is a convert view in adapter? And how it's works?

看不懂什么是convert view..具体是什么时候进入if条件,什么时候进入else条件?

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;
    }

convertView 是一个被 ListView 适配器重用的视图。当您滚动时,不再可见的项目将被重新用于显示变得可见的新项目。这称为回收,这样做是为了提高性能。

convertView 为 null 时,这意味着没有可重复用于此项目的视图,因此您必须从 XML 布局和 return 中扩充一个新视图在方法的最后。

当不为null时,表示视图已经被重用。您可以采用转换视图,用新数据替换旧数据,然后 return 这个视图。这样您就可以消除 inflate 方法调用,这是一项昂贵的操作。这有助于您的列表视图平滑滚动。

这里还有另一个性能改进 - view holder 模式。它存储对项目视图的引用,因此您不必为每个项目调用 findViewById 操作。这也是一项昂贵的操作,最好避免。