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

Android - When to pass the parent ViewGroup to LayoutInflater.inflate?

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

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, it seems that when the parent is passed, it can influence the LayoutParams 。但我不确定如何解释除此之外的代码。

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

谁能解释一下何时将 ViewGroup parent 传递给 inflate 以及何时不传递?

因此,没有任何已知父项,您在 XML 树的根元素上声明的所有 LayoutParams 都将被丢弃。 如果没有 LayoutParams,最终承载膨胀布局的 ViewGroup 将留给您生成一个默认集。如果你很幸运(在很多情况下你是),这些默认参数与你在 XML

中的相同

基于此documentation

ViewGroup: Optional view to be the parent of the generated hierarchy (if attachToRoot is true), or else simply an object that provides a set of LayoutParams values for root of the returned hierarchy (if attachToRoot is false.)

这意味着你经历了什么。

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