Android 适配器
Android adapter
我有一个 Adapter
和 ViewHolder
。假设我只想在 getView()
方法中为 ViewHoler
设置一次数据,实际发生的情况是,每次我滚动视图时它都会设置数据。
如何检查 ViewHolder
是否已经初始化?
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Deal deal = dealsArr.get(position);
holder.textView.setText(deal.getPrice);
// Here is my issue. how can I do it only once?
changePrice(deal, true);
}
我假设您已经对 Android 适配器和 getCount()
和 getView()
的工作有了基本的了解 if not see this
适配器 returns 空视图或膨胀视图; findViewbyId(R.id.xmlID) 总是被执行;
ViewHolder 用于避免频繁调用并确保您的列表视图的平滑滚动。
Excellent Explanation here
先花点时间了解一下Listview的回收机制!
我分享的link也有一个link。!
public View getView(final int position, View convertView, ViewGroup parent) {
//rest of the code goes here
}
关注这个方法的参数,
用于回收的 convertView
最初将为空,因为尚未完成回收
所以这部分代码会被执行;
if (convertView == null) { //convertView is null when recycling isn't done
holder = new ViewHolder();
convertView.setTag(holder);
}
因此我们初始化视图持有者并使用按 ID 查找视图引用我们所有的视图(按钮、文本视图等)。
下次调用getView()
;它执行这部分代码;
else {
holder = (ViewHolder) convertView.getTag();
}
我强烈建议先了解 Android 适配器和列表视图回收机制的工作原理,而不要在代码中使用 ViewHolder。首先,您了解调用方法的方式和时间,然后使用 ViewHolder
进行更多优化
我有一个 Adapter
和 ViewHolder
。假设我只想在 getView()
方法中为 ViewHoler
设置一次数据,实际发生的情况是,每次我滚动视图时它都会设置数据。
如何检查 ViewHolder
是否已经初始化?
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Deal deal = dealsArr.get(position);
holder.textView.setText(deal.getPrice);
// Here is my issue. how can I do it only once?
changePrice(deal, true);
}
我假设您已经对 Android 适配器和 getCount()
和 getView()
的工作有了基本的了解 if not see this
适配器 returns 空视图或膨胀视图; findViewbyId(R.id.xmlID) 总是被执行; ViewHolder 用于避免频繁调用并确保您的列表视图的平滑滚动。
Excellent Explanation here
先花点时间了解一下Listview的回收机制! 我分享的link也有一个link。!
public View getView(final int position, View convertView, ViewGroup parent) {
//rest of the code goes here
}
关注这个方法的参数,
用于回收的 convertView
最初将为空,因为尚未完成回收
所以这部分代码会被执行;
if (convertView == null) { //convertView is null when recycling isn't done
holder = new ViewHolder();
convertView.setTag(holder);
}
因此我们初始化视图持有者并使用按 ID 查找视图引用我们所有的视图(按钮、文本视图等)。
下次调用getView()
;它执行这部分代码;
else {
holder = (ViewHolder) convertView.getTag();
}
我强烈建议先了解 Android 适配器和列表视图回收机制的工作原理,而不要在代码中使用 ViewHolder。首先,您了解调用方法的方式和时间,然后使用 ViewHolder
进行更多优化