Android 自定义listView中的持有者是如何创建的?
我在下面的链接中看到了自定义listview的程序 这是自定义适配器:Android 自定义listView中的持有者是如何创建的?,android,android-listview,Android,Android Listview,我在下面的链接中看到了自定义listview的程序 这是自定义适配器: public class WeatherAdapter extends ArrayAdapter<Weather>{ Context context; int layoutResourceId; Weather data[] = null; public WeatherAdapter(Context context, int layoutResourceId, We
public class WeatherAdapter extends ArrayAdapter<Weather>{
Context context;
int layoutResourceId;
Weather data[] = null;
public WeatherAdapter(Context context, int layoutResourceId, Weather[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
WeatherHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new WeatherHolder();
holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
row.setTag(holder);
}
else
{
holder = (WeatherHolder)row.getTag();
}
Weather weather = data[position];
holder.txtTitle.setText(weather.title);
holder.imgIcon.setImageResource(weather.icon);
return row;
}
static class WeatherHolder
{
ImageView imgIcon;
TextView txtTitle;
}
}
在getView方法中,他为WeatherHolder创建对象这个WeatherHolder类是什么
它是如何创建的?
它是由我们手动创建的吗?
因为我在任何地方都找不到WeatherHolder的尸体
节目中的其他内容
我希望我的问题是清楚的。程序中的WeatherHolder是什么,是谁创建了WatchHolder类。在滚动ListView findViewById的过程中,经常调用一行ListView的哪个布局的子级,这会降低性能。即使适配器返回一个膨胀视图进行循环,您仍然需要查找元素并更新它们。避免重复使用findViewById的一种方法是使用视图保持器设计模式
ViewHolder对象将每个零部件视图存储在布局的标记字段中,因此您无需重复查找即可立即访问它们。首先,您需要创建一个类来保存您的确切视图集
这是代码中的类
static class WeatherHolder {
ImageView imgIcon;
TextView txtTitle;
}
是的,它是由我们手动创建的
在getView中,您将创建该类的对象并访问它
更多信息
Wheatherholder类是在Wheateradapter类中声明的类,如果行尚未创建,或者已经创建,它将创建一个Wheatherholder;或者null他从当前行获取wheaterholder感谢您的回复。。。。你能给我详细介绍一下WeatherHolder类的用法吗?WheatherHolder用于初始化布局上的视图,通过这个类,你可以访问视图,并可以使用你拥有的数组设置像setText这样的字段,以获取数组的对象。有一个可变的位置
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
WeatherHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new WeatherHolder();
holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
row.setTag(holder);
}
else
{
holder = (WeatherHolder)row.getTag();
}
//do ur staff
return row;
}