当跨三个选项卡创建相同的片段时,我很难理解片段的生命周期。每个片段中的主要小部件是一个 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)
来查看焦点是否丢失或获得,而事实并非如此。我阅读了一些相当流行的帖子,并把注意力从我的 XML 上移开,但这也无济于事。
只是为了确定,我应该在哪里设置我的 EditText 对象?在OnCreateView()
我的片段中?这就是上述代码当前所在的位置。我在我的活动中创建自定义类的三个对象作为全局变量。在我认为适合我代码的区域中,我有 getter 和 setter。上面的代码是否应该存在于onCreate()
我的片段中?如果您认为这是一个焦点问题,那么关闭焦点并仅在我需要时使用它的公认方法是什么?更重要的是,当我的应用程序第一次运行时,我在哪里打开焦点?在运行两次以呈现前两个选项卡OnTabSelected()
之前调用。getItem()
那么,如果我在全球范围内关闭它,我将在哪里获得最初的关注?可以用一种监听器设置焦点吗?