既然可以使用旧变量,为什么还要创建一个新变量并使用它呢?

Why creating a new variable and using it when you can use the old variable?

为什么我们需要:-

  1. 创建视图 x。
  2. 然后设x = a
  3. 如果可以直接使用a,那么在x上使用if命令。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        // check if the current view is reused else inflate the view
        View listItemView = convertView;
    
        if(listItemView == null){
            listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
        }
    

相反,我们为什么不能这样做?

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if(convertView == null){
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
    }

第二个选项也很完美。我不知道你为什么认为你不能那样做。

只要确保你returnconvertView在里面做了其他事情之后。

第一和第二个例子是有效的。只有在第一种情况下,您正在创建 class 变量的本地副本。这是没用的。为什么开发商要这样做?谁知道:)

关于充气。 inflate 操作有些昂贵,因为你的适配器项是相似的,可以只对视图充气一次。

由于开发者在某些情况下想要分配一个值LayoutInflater.from(...).inflate(...),与参数convertView不同,他选择不覆盖参数,而是引入一个新变量。不修改方法参数是一种很好的风格。

因此,在 convertView 为 null 的情况下,listItemViewLayoutInflater 调用中获取一个值,以便在方法的后面使用。而且使用 null 参数调用该方法的事实仍然可见。

作为更简洁的替代方法,可以使用 Java 的三元运算符来完成:

View listItemView = convertView != null ?
        convertView :
        LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);

这样甚至可以声明变量final