gpt4 book ai didi

android - 如何跨选项卡使用单个 fragment 中的 EditText?

转载 作者:行者123 更新时间:2023-11-29 01:51:20 26 4
gpt4 key购买 nike

当跨三个选项卡创建同一个 fragment 时,我很难理解我的 fragment 的生命周期。每个 fragment 中的主要小部件是一个 EditText 对象,该对象在我创建的类中进行跟踪,每个选项卡一个,在我的应用程序首次执行时创建。当应用程序执行输入(由屏幕上的按钮提供,而不是键盘)时,将文本设置到第二个选项卡的 EditText 中。

输入似乎在我的 FragmentPagerAdapter 内的 getItem() 之后。我知道 getItem() 在创建我的选项卡时被调用了两次,这是完全正常的行为,但我不明白这是我的代码设计的焦点问题还是逻辑问题(我希望是前者)。是否与 getItem() 返回的 instantiate() 有关?一旦 instantiate() 被调用,焦点是否总是跟随它,因为我在 fragment 的 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 对象?在我的 fragment 中的 OnCreateView() 中?这就是上面的代码当前所在的位置。我在 Activity 中创建自定义类的三个对象作为全局变量。我在我认为合适的代码区域有 getter 和 setter。上面的代码是否应该存在于我的 fragment 的 onCreate() 中?如果您认为这是一个焦点问题,那么关闭焦点并仅在我需要时才使用它的公认方法是什么?更重要的是,当我的应用程序首次运行时,我应该在哪里打开焦点? OnTabSelected()getItem() 运行两次以呈现前两个选项卡之前被调用。那么,如果我在全局范围内关闭它,我将在哪里获得最初的关注点?可以设置焦点类型的监听器吗?

最佳答案

不太确定您要做什么,但这里有一些建议:

  • 让你的全局 Activity 对象存在于主 Activity 中并调用getActivity().someObject来自你的 fragment
  • findViewById()将向下搜索 View 层次结构,直到找到 R.id.display
  • 的第一个实例
  • 您的 fragment View 在您使用 fragment 事务提交之前将不可用,这意味着它们的 View 在此之前也将不可用
  • 您正在通过调用 v.findViewById()findViewById()“限定”到某个 View v
  • 如果您正在通过 fragment 进行分页,或许可以尝试在 fragment 的 onResume() 方法中设置您的 Activity View
  • fragment 的onCreateView()方法只被调用一次。 这将在 onCreate(Bundle) 和 onActivityCreated(Bundle) 之间调用。

关于android - 如何跨选项卡使用单个 fragment 中的 EditText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17849829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com