【问题标题】:Android Development - Find Text View Inside of a fragment that's inside of a TabLayoutAndroid 开发 - 在 TabLayout 内的片段内查找文本视图
【发布时间】:2015-11-05 02:39:35
【问题描述】:

我意识到如果视图不是您正在查看的布局的直接子级,则无法“找到”视图。我有一个 Activity,里面有一个 ViewPager。 ViewPager 内部的第 0 个选项卡或视图有一个 my_fragment.xml 在其中膨胀。然后该片段内部有一个 TextView 。我如何从我的主要/根活动中访问它。此外,在片段的onCreate 方法中,我已经放置了一行代码,它只在TextView 上调用setText,而这似乎根本没有被调用。对这一切有什么想法吗?

【问题讨论】:

  • 发布您的代码。如果没有看到您的代码,我们什么也说不出来。另外,为什么需要从 Activity 访问 TextView?
  • 我会尽快发布。好吧,现在我考虑一下,我不必从活动中访问它。我可以从片段类访问它。但是有两个问题;就像我说的那样,我在 onCreate (或 afterOnCreate )中没有被调用,也没有错误。第二件事是我需要在某一时刻从活动中访问片段类实例本身。如果它隐藏在视图中,我将如何从活动中访问片段?看来,为了获得某个视图,您需要访问它的每个父级。冒泡。
  • 片段只是通过菜单添加的默认片段...主要活动代码:pastebin.com/Yf5uLBeZ

标签: android


【解决方案1】:
  1. 要访问视图,您无需访问它的每个父级/超级父级。视图层次结构中的父级或任何其他父级就足够了。如果您获得了对子视图的任何父/超父的引用,您可以调用View.findViewById() 来获取子视图。

View.findViewById() - 查找具有给定 id 的子视图。如果此视图具有给定的 id,则返回此视图。

  1. 不要在FragmentonCreate 中尝试setText。您需要在片段膨胀视图后执行此操作。这只发生在onCreateView。所以你需要在onCreateView方法或生命周期中这个方法之后的任何其他方法中执行setText(最好是onActivityCreated())。

  2. 要从活动中访问片段类实例本身,您可以参考:Is it possible to access the current Fragment being viewed by a ViewPager?

【讨论】:

  • 因此,如果我从 Main Activity 调用 findViewById(其中包含一个 TabLayout,其中包含一个带有 textview 的片段)并寻找例如R.id.myTextView 它会返回 NOT null 吗?因为它为我返回了 null 。另外,如果我有两个相同的片段,因此会有两个具有相同 ID 的 TextViews,会发生什么?
  • 不,我的意思是 parent 在布局中变得膨胀。如果布局中有两个具有相同 id 的 TextView,则将找到第一个。因此,最好不要在单个布局中使用相同的 id。在您的情况下,您需要获取 Fragment 实例,然后在其上调用 findViewById,即,如果您想从活动中访问 TextView。
  • 是的,猜到了。我稍后会尝试这种方法并回复您。如果它有效,我会爱你:)
  • 我无法实现你给我的链接。我的 ViewPager 不是动态的。它有两个始终存在且始终相同的选项卡。我需要访问位于 ViewPager 的第一个选项卡中膨胀的片段中的 TextView (myTextView)。我该怎么做?
  • 另外,我在 onCreateView 中尝试了 setText,但仍然没有被调用。
猜你喜欢
  • 2016-05-05
  • 2017-06-18
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多