Android:Fragment:为什么我只能在onCreateView方法中获得对视图的引用?

时间:2017-08-04 00:12:12

标签: java android

我是新手,目前正在学习java。 在我的Fragment上打开MainActivity后,我想更改Fragment中的视图。 我注意到我不能像我在findViewById(R.id.viewNameInXml)中那样自由选择使用MainActivity。搜索了一段时间后,我找到了解决方案来获取对视图的引用: 我必须将onCreate()的{​​{1}}方法更改为以下内容:

Fragment

我的问题是:为什么我只能以这种方式访问​​View inf = inflater.inflate(R.layout.fragment_name, container, false); TextView tv = (TextView) inf.findViewById(R.id.textViewIdXml); zv.setText("new text"); return inf; ?请记住,我是初学者,所以请尽量保持简单 -

3 个答案:

答案 0 :(得分:2)

并不是说您只能在onCreateView中访问它,而且此方法是使用findViewById()并保存对其中某些视图的引用的便捷位置。您也可以使用onViewCreated

为什么这两种方法方便访问视图? Fragment没有findViewById方法,因此您需要一个View来调用该方法。在onCreateView中,您已经在扩充视图层次结构,因此您拥有一个视图;在第二个中,视图层次结构的根视图作为方法参数传递,因此您再次拥有View。

在这两种方法之外,您可以通过调用Fragment获取getView()的根视图,但请注意,这可以返回null,具体取决于何时因Fragment生命周期而被调用。 (顺便说一下,上面的方法都是生命周期方法。)

答案 1 :(得分:1)

  

为什么我只能这样访问TextView

主要是因为你还要学习Java中的班级成员:)没有什么能阻止你将View inf;移出onCreateView。你只需要在那里分配它,但一旦完成,你可以在其他地方使用它。

答案 2 :(得分:0)

这是因为您需要从片段中放大的视图/布局中找到textview。在“活动”中,将布局设置为“活动”的内容,它会在内部扩大并保留相同内容的引用。因此,您可以在此处直接使用findViewById()

注意:将布局与活动结合使用是遗留解决方案,并且在引入Fragment之前就已使用。