我有一个自定义视图“ClearableTextView”,在相对布局中有一个 EditText 和一个按钮。视图是通过扩展布局文件创建的,因此两个视图具有 ID。
我也有两个片段,每个片段都扩展了它自己的布局。这两种布局都包括我的自定义 ClearableTextView,在其他视图中。
我知道重复使用相同的 ID 是不好的,结果是不可预测的,但是来自谷歌的一个名字听起来很法国的人曾经说过,只要子视图在父视图中具有唯一的 ID,找到正确的 ID 应该没有问题. 我搜索的视图甚至没有共同的根视图,它们所在的视图由不同的 Fragment 拥有。
我在片段 A 中查找 EditText 的引用,如下所示:
v= inflater.inflate(layoutA);
TextView tvA=v.findViewById("someLayoutUniqueID").findById(ClearableTextView_uniqueID_A).findViewById(editTextID);
对于片段 B 中的 EditText:
v= inflater.inflate(layoutB);
TextView tvA=v.findViewById("anotherLayoutUniqueId").findById(ClearableTextView_uniqueID_B).findViewById(editTextID);
当我说一个 ID 是唯一的时,这意味着它在我项目的所有布局中都是唯一的。
现在奇怪的东西:我创建了 Fragment A。我不知道它是否重要,但 Fragment 使用 FragmentStatePagerAdapter 附加到 viewPager。我在 EditText 中输入了一些内容。然后我按下一个按钮来创建 Fragment B,从 viewPager 中删除 A,并将 Fragment B 附加到 viewPager。现在在片段 B 中,EditText 包含来自片段 A 的文本!!!为什么?
我知道 viewpager 结合了每个片段的视图,但在我的情况下它不应该,因为始终只附加一个片段。我正在他们的父母中搜索具有唯一 ID 的 EditText 视图。有任何想法吗?