适配器中的转换视图是什么?它是如何工作的?
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
操作。这也是一项昂贵的操作,最好避免。
看不懂什么是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
操作。这也是一项昂贵的操作,最好避免。