Android - 何时将父ViewGroup传递给LayoutInflater.inflate?

时间:2016-02-28 07:34:30

标签: android android-layout listview android-arrayadapter layout-inflater

我的应用程序中有一个简单的ListView。 ListView绑定到我的ArrayAdapter类,其getView方法实现如下。

class ScheduleListAdapter extends ArrayAdapter<ScheduleItem> 
{
    @Override public View getView(int position, View convertView, ViewGroup parent) {

        View view = convertView;

        if (view == null) {
            view = _activity.getLayoutInflater().inflate(R.layout.schedule_item2, null);
        } 

        // not shown - code initialize elements of view

        return view;
    }

在上面的代码中,请注意parent ViewGroup参数被忽略,并且不会传递给inflate调用。我在几本书和在线示例之后对此代码进行了建模。

但现在我已经看到网络上的其他示例建议parent需要传递给inflate,如下所示:

View view = inflater.inflate(R.layout.schedule_item2, parent, false);

我已经尝试过两种方式,但无论如何它似乎都很好。但是看source for inflate,似乎当parent通过时,它可以影响用于初始化到视图的LayoutParams。但我不确定如何解释超出此范围的代码。

将上述内容与使用LayoutInflater与Fragments和RecyclerView的其他在线示例进行比较时,会让人感到困惑。这些示例似乎总是将parent参数明确传递给inflate。我假设在某些情况下这样做是有意义的。

有人可以解释何时将ViewGroup parent传递给inflate以及何时不传递?

2 个答案:

答案 0 :(得分:1)

因此,没有任何已知的父,您在XML树的根元素上声明的所有LayoutParams都将被丢弃。 如果没有LayoutParams,最终托管膨胀布局的ViewGroup将为您生成默认设置。如果你很幸运(在很多情况下你是这样),这些默认参数与你在XML中的参数相同

答案 1 :(得分:0)

基于此documentation

  

ViewGroup:可选视图是生成的层次结构的父级   (如果attachToRoot为true),或者只是一个提供的对象   返回层次结构的根的LayoutParams值集(如果   attachToRoot为false。)

这意味着你所经历的。

何时传递:指定哪一个是父项,此view必须附加到父项。如果未附加,则将使用parent中唯一的LayoutParamss。