为什么在可以使用旧变量的情况下创建一个新变量并使用它?

时间:2018-12-29 13:05:41

标签: java android arrays android-arrayadapter

我们为什么需要:-

  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);
    }

3 个答案:

答案 0 :(得分:1)

第二个选项也可以正常使用。我不知道您为什么认为自己无法做到这一点。

请确保在其中进行其他操作后返回convertView

答案 1 :(得分:1)

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

关于充气。膨胀操作有些昂贵,导致适配器项是类似的,因此只能膨胀一次视图。

答案 2 :(得分:1)

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

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

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

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

通过这种方式,甚至可以将变量声明为final