我的应用程序中有一个简单的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
以及何时不传递?
答案 0 :(得分:1)
因此,没有任何已知的父,您在XML树的根元素上声明的所有LayoutParams都将被丢弃。 如果没有LayoutParams,最终托管膨胀布局的ViewGroup将为您生成默认设置。如果你很幸运(在很多情况下你是这样),这些默认参数与你在XML中的参数相同
答案 1 :(得分:0)
ViewGroup:可选视图是生成的层次结构的父级 (如果attachToRoot为true),或者只是一个提供的对象 返回层次结构的根的LayoutParams值集(如果 attachToRoot为false。)
这意味着你所经历的。
何时传递:指定哪一个是父项,此view
必须附加到父项。如果未附加,则将使用parent
中唯一的LayoutParamss。