我不明白什么是转换视图。具体来说,程序什么时候输入条件,什么时候输入条件?
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;
}
答案 0 :(得分:2)
convertView
是ListView
适配器重用的视图。滚动时,不再可见的项目将重新用于显示新的项目。这称为回收,它是为了提高性能而完成的。
当convertView
为null时,这意味着没有可用于该项目的视图,因此您必须从XML布局中添加一个新视图,并在方法末尾将其返回。
当它不为null时,表示该视图已被重用。您可以采用转换视图,将旧数据替换为新数据,然后返回此视图。这样,您就可以消除inflate
方法调用,这是一项昂贵的操作。这有助于您的列表视图平滑滚动。
这里还有另一个性能改进-视图持有者模式。它存储了对项目视图的引用,因此您不必为每个项目调用findViewById
操作。这也是一项昂贵的操作,可以避免。