如果你按照下面提到的那样逐步完成,你会理解我的问题(对不起,但我不能以其他方式让你理解)。这可能会令人困惑。但是,我相信如果你读过一次,你就会理解。
创建一个新的android项目,然后创建两个片段。你现在会 有
一个。 MainActivity.java。
湾FirstFragment(FirstFragment.java)和它的xml 文件(first_fragment.xml)。
℃。 SecondFragment(SecondFragment.java)和它的xml 文件(second_fragment.xml)。
现在创建一个自定义linearLayout类(FormRow.java),如下所示:
public class FormRowNew extends LinearLayout {
public FormRowNew(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
private void initView() {
View.inflate(getContext(), R.layout.form_row, this);
}
}
xml文件(form_row)就像这样:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="eeeee"/>
</LinearLayout>
在FirstFragment中使用此自定义线性类TWICE,如下所示:
<gallery.com.yyyyyyyyy.FormRow
android:id="@+id/first"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txvFirst"
>
</gallery.com.yyyyyyyyy.FormRow>
<gallery.com.yyyyyyyyy.FormRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/first"
>
</gallery.com.yyyyyyyyy.FormRow>
记住:我已经使用过两次了。你也至少使用它两次。
现在,在MainActivity.java中加载一些id(rlRootLayout)的FirstFragment,如下所示。
FirstFragment firstFragment = new FirstFragment();
getSupportFragmentManager().beginTransaction().addToBackStack(null)
.replace(R.id.rlRootLayout, firstFragment).commit();
同样,从FirstFragment中加载相同ID(rlRootLayout)的Second Fragment,如下所示。
secondFragment blankFragment = new secondFragment();
getActivity().getSupportFragmentManager().beginTransaction()
.addToBackS tack(null).replace(R.id.rlRootLayout, blankFragment)
.commit();
这里我将FirstFragment添加到FirstFragment的MainActivity中 在ID(rlRootLayout)。
问题: - 运行应用程序并转到上述页面:
MainActivity ->
FirstFragment ->
Change something in BOTTOM FormRow(like add some text in EditText) ->
SecondFragment ->
FirstFragment.
现在,请参阅FirstFragment中的自定义类(FormRow)。 无论我们在底层FormRow类中添加了什么,都会自动添加到Top FormRow中。我无法找到发生这种情况的原因。即使我没有对顶级FormRow做任何事情,当我从SecondFragment回来时它会根据底部变化。 请帮忙。
答案 0 :(得分:1)
在添加第二个片段时将文本保存在editText中。然后设置这些保存的文本,同时从第二个回到第一个
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
//set edit text
}
被召唤。
答案 1 :(得分:1)
这种行为是因为EditText
的身份。当第一个片段在从第二个片段返回时对布局进行膨胀时,它会使用它来分配值以编辑文本。所以在这种情况下,EditText
的{id}具有相同的id,因此它为两个Edittexts的