它是否等同于在片段中调用 getActivity().findViewById 而不是 <any_inflated_layout>.findViewById?

Is it equivalent to call getActivity().findViewById instead of <any_inflated_layout>.findViewById in a fragment?

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

现在,我更喜欢 return 膨胀的布局(我不存储它)。因此,我不会向调用 findViewById 的其他函数传递任何值。但他们仍然打电话给 findViewById ;如何?只需调用 Objects.requireNonNull(getActivity()).findViewById.

说到片段,是等价的吗?例如:

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

In terms of RAM or CPU consumption

直接查看片段的视图会更快,因为您将搜索更浅的层次结构。这不应该与您有关,它在性能方面无关紧要。

In term of behavior (is there any risk with the second way to do it?)

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

假设您有与 ViewPager 页面相同的片段。使用 getActivity().findViewById() 意味着您将仅引用 ViewPager 引用的片段的第一个实例中的视图(而不是其他页面)。另一个例子是当您在 activity 中有一个带有 id 的视图和在 Fragment 中有一个具有相同 id 的视图(在更深层次上)。使用 getActivity().findViewById() 将引用 activity 视图,而不是在片段中找到的视图。