Android 片段内带有EditText的自定义LinearLayout

Android 片段内带有EditText的自定义LinearLayout,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,如果你像下面提到的那样一步一步地做,你就会理解我的问题(对不起,我不能用其他方式让你理解)。这可能令人困惑。但是,我相信如果你读一次,你就会明白 创建一个新的android项目,然后创建两个片段。你现在会 有 a。MainActivity.java b。FirstFragment(FirstFragment.java)及其xml 文件(first_fragment.xml) c。SecondFragment(SecondFragment.java)及其xml 文件(second_fragment

如果你像下面提到的那样一步一步地做,你就会理解我的问题(对不起,我不能用其他方式让你理解)。这可能令人困惑。但是,我相信如果你读一次,你就会明白

  • 创建一个新的android项目,然后创建两个片段。你现在会 有

    a。MainActivity.java

    b。FirstFragment(FirstFragment.java)及其xml 文件(first_fragment.xml)

    c。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加载相同ID(rlRootLayout)的第二个片段,如下所示

    secondFragment blankFragment = new secondFragment();
    getActivity().getSupportFragmentManager().beginTransaction()
    .addToBackS tack(null).replace(R.id.rlRootLayout, blankFragment)
    .commit();  
    
    在这里,我将从FirstFragment向MainActivity添加SecondFragment at ID(rlRootLayout)

    问题:-运行应用程序并转到前面提到的页面:

     MainActivity -> 
     FirstFragment -> 
     Change something in BOTTOM FormRow(like add some text in EditText) ->
     SecondFragment ->
     FirstFragment.
    
    现在,请参见FirstFragment中的自定义类(FormRow)。 无论我们在底部FormRow类中添加了什么,都会自动添加到顶部FormRow中。我找不到发生这种情况的原因。即使我对top FormRow不做任何操作,当我从SecondFragment返回时,它也会根据底部进行更改。
    请帮忙

    在添加第二个片段时,将文本保存在editText中。然后设置保存的文本,同时从第二个返回到第一个

    @覆盖
    ViewStateRestored上的公共无效(@Nullable Bundle savedinStateCState){
    super.onViewStateRestored(savedInstanceState);
    //设置编辑文本
    }
    

    调用。

    该行为是由于编辑文本的id造成的。当第一个片段在从第二个片段返回时膨胀布局时,它通过使用它的id分配值来编辑文本。因此在这种情况下,两个
    EditText
    都具有相同的id,因此它为两个EditText的

    分配相同的值。这一个帮助了我@Arjun
    secondFragment blankFragment = new secondFragment();
    getActivity().getSupportFragmentManager().beginTransaction()
    .addToBackS tack(null).replace(R.id.rlRootLayout, blankFragment)
    .commit();  
    
     MainActivity -> 
     FirstFragment -> 
     Change something in BOTTOM FormRow(like add some text in EditText) ->
     SecondFragment ->
     FirstFragment.