gpt4 book ai didi

android - 当 fragment 从 backstack 中弹出时,膨胀的 View 会失去它们的状态

转载 作者:太空狗 更新时间:2023-10-29 14:46:02 25 4
gpt4 key购买 nike

我多次膨胀同一个布局并将它们添加到同一个容器 View 。这是我所做的:

layout_inflated.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<RadioButton
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

</LinearLayout>

我膨胀这个布局并添加到另一个 View ,如下所示:

for(int i = 0; i < 3; i++) {
final View rowLayout = layoutInflater.inflate(R.layout.layout_inflated, null, false);
rowLayout.setTag(i);
containerView.addView(rowLayout);
}

然后,假设我在第一行、第二行和第三行输入数字 "111""222""333" ' 编辑文本。然后我检查第 3 行的 RadioButton,并保留第 1 行和第 2 行的 RadioButtons 未选中。然后我移动到下一个 fragment ,这个 fragment 被放入后台。然后我回到这个 fragment ,它从后台弹出。此时,所有 3 个 RadioButton 都被选中,所有编辑文本的框中都有 "333"。也就是说,所有行都具有第三行的状态。

但是,如果我不从同一个 xml 扩展行并创建如下所示的行,那么一切正常:

for(int i = 0; i < 3; i++) {
LinearLayout rowLayout = new LinearLayout(context);
rowLayout.setOrientation(HORIZONTAL);
RadioButton radioButton = new RadioButton(context);
EditText edittext = new EditText(context);
rowLayout.addView(radioButton);
rowLayout.addView(editText);
containerView.addView(rowLayout);
}

我怀疑当我多次膨胀同一个 xml 并将它们添加到同一个父 View 时,因为它们都具有相同的 ID,所以会发生一些事情,Android 无法区分它们。我的真实行布局要复杂得多,不能动态创建,我必须从 xml 中扩展它。那么,谁能解释为什么会发生这种情况以及我该如何避免这种情况?

编辑:当我调试时,我看到 onTextChanged()onCheckedChanged() 方法在 fragment 从后栈。

谢谢。

最佳答案

我认为您的问题是同一元素在一个 View 中的 ID。根据documentation

View IDs need not be unique throughout the tree, but it is good practice to ensure that they are at least unique within the part of the tree you are searching.

据我所知,findViewById() 方法将返回第一次出现的具有所提供 ID 的 View 。这可能是系统仅使用最后一个 View 的值重新绘制 View 然后 Activity 从后台返回的原因。

所以只需从 xml 文件中删除 android:id 即可。如果您需要它们,请使用 setId(int id)

关于android - 当 fragment 从 backstack 中弹出时,膨胀的 View 会失去它们的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169978/

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