当在三个选项卡上创建相同的片段时,我很难理解片段的生命周期。每个片段中的主要窗口小部件是一个EditText对象,它在我创建的类中跟踪,每个选项卡一个,在我的应用程序首次执行时创建。当应用程序执行输入(由屏幕上的按钮提供,而不是键盘)时,将文本设置到第二个选项卡的EditText中。
输入似乎在我的getItem()
内FragmentPagerAdapter
之后。我知道getItem()
在我的标签创建时被调用两次,这是完全正常的行为,但我不理解的是,这是一个焦点问题还是我的代码设计的逻辑问题(我希望前者)。这可能与instantiate()
返回的getItem()
有关吗?一旦instantiate()
被调用,焦点总是跟着它,因为我在片段的onCreateView()
中有这行代码吗?
active.editLine = (EditText) v.findViewById(R.id.display);
// active is the currently active object of my app's class.
我怀疑instantiate()
导致我的错误的原因是因为当我通过setOffscreenPageLimit(2)
增加了对网页的呈现时,文本被发送到第三个标签。
此时我试图追踪发生在哪里,这是一个很好的教育练习。我在挣扎中发现的可能是一个焦点问题 - 但是我清除焦点和设定焦点的尝试似乎没有得到应用,我甚至不确定这是否是潜在的问题。我最终使用active.editLine.debug(0)
来查看焦点是否丢失或获得,但事实并非如此。我阅读了一些this fairly popular post并将我的注意力从我的XML中解脱出来,但这也无济于事。
为了确保,我应该在哪里设置EditText对象?在我的片段中OnCreateView()
?这就是上述代码目前所处的位置。我在我的活动中创建了我的自定义类的三个对象作为全局变量。我觉得在我的代码适当的区域中有吸气剂和制定者。上述代码是否应该存在于我的片段的onCreate()
中?如果您认为这是一个焦点问题,那么在我需要时关闭焦点并仅使用它的公认方法是什么?更重要的是,当我的应用程序第一次运行时,我在哪里开启焦点?在OnTabSelected()
运行两次以呈现前两个选项卡之前调用getItem()
。那么如果我全球关闭它,我会在哪里获得最初的关注?可以使用一种监听器设置焦点吗?
答案 0 :(得分:1)
不完全确定你的目的是什么,但这里有一些建议:
getActivity().someObject
findViewById()
将向下搜索视图层次结构,直到找到R.id.display
的第一个实例findViewById()
v
查看某个视图v.findViewById()
onResume()
方法中设置您的有效视图onCreateView()
方法只调用一次。 This will be called between onCreate(Bundle) and onActivityCreated(Bundle).