什么是适配器中的转换视图

时间:2018-06-27 11:18:28

标签: android listview android-recyclerview custom-adapter convertview

我不明白什么是转换视图。具体来说,程序什么时候输入条件,什么时候输入条件?

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 :(得分:2)

convertViewListView适配器重用的视图。滚动时,不再可见的项目将重新用于显示新的项目。这称为回收,它是为了提高性能而完成的。

convertView为null时,这意味着没有可用于该项目的视图,因此您必须从XML布局中添加一个新视图,并在方法末尾将其返回。

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

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