我们为什么需要:-
如果可以直接使用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);
}
答案 0 :(得分:1)
第二个选项也可以正常使用。我不知道您为什么认为自己无法做到这一点。
请确保在其中进行其他操作后返回convertView
。
答案 1 :(得分:1)
第一个和第二个示例有效。仅在第一种情况下,您正在创建类变量的本地副本。这没用。开发人员为什么要这样做?谁知道:)
关于充气。膨胀操作有些昂贵,导致适配器项是类似的,因此只能膨胀一次视图。
答案 2 :(得分:1)
由于开发人员在某些情况下想要分配与参数LayoutInflater.from(...).inflate(...)
不同的值convertView
,因此他选择不覆盖该参数,而是引入一个新变量。不修改方法参数的好方法。
因此,在convertView
为空的情况下,listItemView
从LayoutInflater
调用中获取一个值,将在方法中进一步使用。而且使用null
参数调用该方法的事实仍然可见。
作为更简洁的替代方法,可以使用Java的三元运算符完成此操作:
View listItemView = convertView != null ?
convertView :
LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
通过这种方式,甚至可以将变量声明为final
。