既然可以使用旧变量,为什么还要创建一个新变量并使用它呢?
Why creating a new variable and using it when you can use the old variable?
为什么我们需要:-
- 创建视图 x。
- 然后设x = a
如果可以直接使用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 的情况下,listItemView
从 LayoutInflater
调用中获取一个值,以便在方法的后面使用。而且使用 null
参数调用该方法的事实仍然可见。
作为更简洁的替代方法,可以使用 Java 的三元运算符来完成:
View listItemView = convertView != null ?
convertView :
LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
这样甚至可以声明变量final
。
为什么我们需要:-
- 创建视图 x。
- 然后设x = a
如果可以直接使用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 的情况下,listItemView
从 LayoutInflater
调用中获取一个值,以便在方法的后面使用。而且使用 null
参数调用该方法的事实仍然可见。
作为更简洁的替代方法,可以使用 Java 的三元运算符来完成:
View listItemView = convertView != null ?
convertView :
LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
这样甚至可以声明变量final
。