我需要实现一个复杂的布局。它有19个部分,可以根据用户先前输入的许多参数来显示或隐藏。
为了简化代码并且不显示未使用的部分,该布局是动态生成的。
所有内容都在一个片段内。 该片段有一个线性布局用作容器,并且在创建该片段时,我会生成所有必要的部分。
每个部分由其自己的本地适配器管理,该适配器负责填充此部分的布局并将其添加到容器中。
一切都运行得非常完美。问题在于有2个部分具有相同的结构,因此它们共享相同的XML布局。由此造成的问题是两个部分的内部视图具有相同的ID。当我进入下一个片段然后返回到这个片段时,系统会尝试恢复视图的先前状态,而当第二个部分被恢复时,它的值也被设置为第一个部分的值,这是一个问题。
是否有任何解决方法可以处理这个问题或者告诉片段不要恢复其状态(因为任何情况下都会手动重新加载)。
以下是当前结构的一个轻量级示例:
片段 XML
部分 XML
所有内容都在一个片段内。 该片段有一个线性布局用作容器,并且在创建该片段时,我会生成所有必要的部分。
每个部分由其自己的本地适配器管理,该适配器负责填充此部分的布局并将其添加到容器中。
一切都运行得非常完美。问题在于有2个部分具有相同的结构,因此它们共享相同的XML布局。由此造成的问题是两个部分的内部视图具有相同的ID。当我进入下一个片段然后返回到这个片段时,系统会尝试恢复视图的先前状态,而当第二个部分被恢复时,它的值也被设置为第一个部分的值,这是一个问题。
是否有任何解决方法可以处理这个问题或者告诉片段不要恢复其状态(因为任何情况下都会手动重新加载)。
以下是当前结构的一个轻量级示例:
片段 XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/section_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
片段代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_layout, container, false);
if (<condition>)
createSection1(getContext(),view);
if (<condition>)
createSection2(getContext(),view);
return view;
}
private void createSection1(Context context, ViewGroup root){
Section1Adapter adapter = new Section1Adapter(context, root);
// ...
}
private void createSection2(Context context, ViewGroup root){
Section2Adapter adapter = new Section2Adapter(context, root);
// ...
}
适配器代码(两者的思路相同)
public Section2Adapter(LayoutInflater inflater, ViewGroup root) {
View view = LayoutInflater.from(context).inflate(R.layout.section_layout, root, false);
initView(view);
root.addView(view);
}