Android 适配器

Android adapter

我有一个 AdapterViewHolder。假设我只想在 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 进行更多优化