它相当于在片段中调用getActivity()。findViewById而不是<any_inflated_layout> .findViewById?

时间:2019-03-03 09:45:26

标签: android android-view findviewbyid

在片段的onCreateView方法中,我曾经将膨胀后的布局存储在变量中,然后将后者传递给我在此膨胀后的findViewById上调用View的其他函数。

现在,我宁愿只返回膨胀的布局(我不存储它)。因此,我不会将任何值传递给调用findViewById的其他函数。但是他们仍然叫findViewById;怎么样?只需致电Objects.requireNonNull(getActivity()).findViewById

谈论片段,是否等效?例如:

  1. 在RAM或CPU消耗方面
  2. 就行为而言(第二种方式有风险吗?)

1 个答案:

答案 0 :(得分:1)

  

关于RAM或CPU消耗

直接浏览片段的视图会更快,因为您将搜索较浅的层次结构。这不关您的事,对您的表现影响不大。

  

就行为而言(第二种方式有风险吗?)

您不应使用getActivity()。findViewById()。片段应该是独立的,并直接而不是通过间接方式(例如getActivity())来管理其视图。由于findViewById()的工作方式,您还可能会引入一些细微的错误(这意味着它返回具有找到的指定ID的第一个视图)。

想象一下,您拥有与ViewPager页面相同的片段。使用getActivity()。findViewById()意味着您将仅引用ViewPager所引用片段的第一个实例(而不是其他页面)中的视图。另一个示例是当您在活动中具有一个ID为ID的View,而在Fragment中(更深层次)为一个具有相同ID的View。使用getActivity()。findViewById()将引用活动视图,而不是片段中的视图。