android - 在 android 列表适配器中,如果 convertView 为 null 而不是 null 怎么办?任何人都可以解释下面的 getView 方法

标签 android listview android-listview listviewitem convertview

if(converView==null) { } 别的 { } 如果我避免编写其他部分以及它如何影响我的代码怎么办? 我只是想知道没有 else 部分它是否工作正常。有人可以解释一下 convertview 的 gettag 和 settag 吗???

            public View getView(int position, View convertView, ViewGroup parent) {
        DeviceViewHolder holder = null;
        mSelectedDeviceBin = getItem(position);

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.single_device_view, null);
            holder = new DeviceViewHolder();
            holder.deviceId = (TextView) convertView
                    .findViewById(R.id.deviceId);

            holder.deviceType = (TextView) convertView
                    .findViewById(R.id.deviceType);

            convertView.setTag(holder);

        } else

            holder = (DeviceViewHolder) convertView.getTag();

        // Populating the views
        holder.deviceId.setText(mSelectedDeviceBin.getDeviceBinId());

        StringBuilder deviceCount = new StringBuilder();
        deviceCount.append("");
        double count = mSelectedDeviceBin.getQtyStock();
        deviceCount.append(count);
        String deviceCountString = deviceCount.toString();
        holder.deviceType.setText("Total number of Items:"
                + deviceCountString);

        return convertView;
    }

最佳答案

实现使用 convertViews 和 ViewHolder 模式,工作方式如下。

Android 不会为列表中的每个项目创建一个新 View ,而是只创建可见的 View 。一旦 View 离开屏幕,它将被重新使用。这样,相对较慢的 inflate 调用的数量就被最小化了。

其次,ViewHolder 模式确保 View 查找 (findViewById()) 的数量最小化,因为这也相对较慢,尤其是在滚动时。因此,不是每次都查找 View ,而是将直接引用保存在内存中,并存储在 ViewHolder 中。为了确保正确的 ViewHolder 对象与正确的项目 View 一起存储,它们在 convertView 中使用 view.setTag() 进行设置。它们可以通过使用 getTag() 调用获得。

else 是必需的,否则 viewHolder 变量将为 null,应用程序将崩溃。

为了清楚起见,我建议您像这样编写 else:

} else {
    holder = (DeviceViewHolder) convertView.getTag();
}

编辑:另外,您可以将 LayoutInflator 的创建移动到 if(convertView == null){} 语句中。否则不需要。

关于android - 在 android 列表适配器中,如果 convertView 为 null 而不是 null 怎么办?任何人都可以解释下面的 getView 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19543617/

相关文章:

c# - 如何在 C# 中使用 Caliburn.Micro 从 ListView 获取选定的项目和事件?

class - Flutter如何使此类返回onChanged?

android - 动态添加 ListView 的每一行的 View

php - eclipse 在 InBackground 方法中显示错误我不知道如何修复它

java - Android 应用中的动态 ListView

ListView 中的 Android WebView onclick 事件问题

android - Android 上的 Kivy 和 OSC

android - 使用 include 后 ListView 不显示

android - 有没有办法挂载 Android .img 以访问 AVD(Android 虚拟设备)内容?

android - 在 WebView 加载之前在子选项卡上显示进度条